VC下添加和删除系统托盘图标,处理响应事件(Shell_NotifyIcon)

分步骤如下:

1,定义用户消息

#define WM_TRAY_NOTIFY (WM_USER + 8118)

2,添加托盘图标

NOTIFYICONDATA data;
memset(&data, 0, sizeof(data));
// the basic functions need only V1
#ifdef NOTIFYICONDATA_V1_SIZE
    data.cbSize = NOTIFYICONDATA_V1_SIZE;
#else
    data.cbSize = sizeof(data);
#endif
data.hWnd = hWnd;
data.uCallbackMessage = WM_TRAY_NOTIFY;
data.uID = IDI_MAIN_ICON;
data.hIcon = LoadIcon(g_hInstance, MAKEINTRESOURCE(IDI_MAIN_ICON) );
data.uFlags =  NIF_ICON | NIF_TIP | NIF_MESSAGE  ;
wstring name = notify_config::GetResourceString( IDS_TIP_NAME );
size_t tip_len = min(sizeof(data.szTip)-1, wcslen(name.c_str())*sizeof(wchar_t));
memcpy(data.szTip, name.c_str(), tip_len);
data.szTip[tip_len] = 0;
Shell_NotifyIcon(NIM_ADD, &data);
其中hWnd为窗体句柄,处理消息块则在此窗体的回调函数中捕捉消息.

3,消息处理

LRESULT CALLBACK MainWndProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam){
    switch (uMsg)
    {
        case WM_TRAY_NOTIFY:
        {
            switch( lParam )
            {
                case WM_RBUTTONUP:
                //do something
                break;
            }
        }
        break;
    }
...
}

4,删除图标

根据NOTIFYICONDATA的结构

typedef struct _NOTIFYICONDATA {
  DWORD cbSize;
  HWND  hWnd;
  UINT  uID;
  UINT  uFlags;
  UINT  uCallbackMessage;
  HICON hIcon;
  TCHAR szTip[64];
  DWORD dwState;
  DWORD dwStateMask;
  TCHAR szInfo[256];
  union {
    UINT uTimeout;
    UINT uVersion;
  };
  TCHAR szInfoTitle[64];
  DWORD dwInfoFlags;
  GUID  guidItem;
  HICON hBalloonIcon;
} NOTIFYICONDATA, *PNOTIFYICONDATA;
一个图标是有个别参数来标识的,即 hWnd+uID 或者 guidItem,在此就以上面的为例子,代码如下:

NOTIFYICONDATA data;
memset(&data, 0, sizeof(data));
data.hWnd = g_hMainWnd;
data.uID = IDI_MAIN_ICON;
Shell_NotifyIcon(NIM_DELETE, &data);


参考: http://msdn.microsoft.com/en-us/library/bb773352(VS.85).aspx

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值