Обёртка NOTIFYICONDATA
От: Аноним  
Дата: 13.04.06 13:03
Оценка: 1 (1)
Здравствуйте!

Писал для себя, может кому-то пригодится. Используется ATL.


#ifndef _NOTIFYICON_H_
#define _NOTIFYICON_H_

#ifdef _UNICODE
    #define STDSTRING std::wstring
#else
    #define STDSTRING std::string
#endif

class CNotifyIcon
{
private:
    NOTIFYICONDATA m_Data;

public:
    CNotifyIcon()
    { 
        ZeroMemory(&m_Data,sizeof(NOTIFYICONDATA));
        m_Data.cbSize=sizeof(NOTIFYICONDATA);
    }

    CNotifyIcon(const NOTIFYICONDATA& data)
    {
        ATLASSERT(&m_Data!=&data);
        if (&m_Data!=&data)
            m_Data=data;

        m_Data.cbSize=sizeof(NOTIFYICONDATA);
    }

    ~CNotifyIcon()
    {
        ShowIcon(NIM_DELETE);
    }

    void SetWindow(HWND hwnd)
    {
        ATLASSERT(hwnd!=NULL);
        m_Data.hWnd=hwnd;
    }
        
    HWND GetWindow()
    {
        return m_Data.hWnd;
    }

    void SetIcon(HICON icon)
    {
        ATLASSERT(icon!=NULL);
        m_Data.hIcon=icon;
    }
        
    HICON GetIcon()
    {
        return m_Data.hIcon;
    }

    void SetHandle(NOTIFYICONDATA data)
    {
        m_Data=data;
    }

    NOTIFYICONDATA GetHandle()
    {
        return m_Data;
    }

    void SetID(UINT id)
    {
        m_Data.uID=id;
    }

    UINT GetID()
    {
        return m_Data.uID;
    }

    void SetFlags(UINT flags)
    {
        m_Data.uFlags=flags;
    }
        
    UINT GetFlags()
    {
        return m_Data.uFlags;
    }

    void SetCallbackMessage(UINT message)
    {
        ATLASSERT(message>WM_USER);
        m_Data.uCallbackMessage=message;
    }
        
    UINT GetCallbackMessage()
    {
        return m_Data.uCallbackMessage;
    }
    

    void SetTip(STDSTRING tip)
    {
        ATLASSERT(tip.size()>0);

        #if (_WIN32_IE < 0x0500)
            _tcsncpy(m_Data.szTip, tip.c_str(), 64);
        #else
            _tcsncpy(m_Data.szTip, tip.c_str(), 128);
        #endif
    }


    STDSTRING GetTip()
    {
        return m_Data.szTip;
    }

    BOOL ShowIcon(DWORD message)
    {
        return Shell_NotifyIcon(message, &m_Data);
    }

#if (_WIN32_IE >= 0x0500)

    void SetTimeout(UINT timeout)
    {
        m_Data.uTimeout=timeout;
    }

    UINT GetTimeout()
    {
        return m_Data.uTimeout;
    }


    void SetInfo(STDSTRING info)
    {
        ATLASSERT(info.size()>0);
        _tcsncpy(m_Data.szInfo, info.c_str(), 256);
    }

    STDSTRING GetInfo()
    {
        return m_Data.szInfo;
    }

    void SetInfoFlags(UINT flags)
    {
        m_Data.dwInfoFlags=flags;
    }

    UINT GetInfoFlags()
    {
        return m_Data.dwInfoFlags;
    }

    void SetInfoTitle(STDSTRING infotitle)
    {
        ATLASSERT(infotitle.size()>0);
        _tcsncpy(m_Data.szInfoTitle, infotitle.c_str(), 64);
    }

    STDSTRING GetInfoTitle()
    {
        return m_Data.szInfoTitle;
    }

#endif // #if (_WIN32_IE >= 0x0500)

};

#endif // #ifndef _NOTIFYICON_H_


Использование.

В mainfrm.h:

CNotifyIcon m_NotifyIcon;


В mainfrm.cpp

m_NotifyIcon.SetWindow(m_hWnd);
m_NotifyIcon.SetIcon(AtlLoadIconImage(IDR_MAINFRAME, LR_DEFAULTCOLOR,16,16));
m_NotifyIcon.SetCallbackMessage(WM_USER+1);
m_NotifyIcon.SetTimeout(30);
m_NotifyIcon.SetInfo(__T("Right click here for more info."));
m_NotifyIcon.SetFlags(NIF_ICON | NIF_MESSAGE | NIF_TIP | NIF_STATE | NIF_INFO);
m_NotifyIcon.SetInfoTitle(__T("Example Title"));
m_NotifyIcon.SetInfoFlags(NIIF_INFO);
m_NotifyIcon.SetTip(__T("Example"));

m_NotifyIcon.ShowIcon(NIM_ADD);

 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.