关于系统托盘的原理

网上有不少关于系统托盘的程序。可是说的似是而非,特别是那个参数uCallbackMessage的意义,今天对照msdn,终于把这个高清楚了。
发现其实很简单,就一个函数,若是你把这个函数力进额透,那么网上的这些类再看就很简单了。 编程

BOOL Shell_NotifyIcon(
    DWORD dwMessage,
    PNOTIFYICONDATA pnid
);     
第一个参数dwMessage类型为DWORD,表示要进行的动做,它能够是下面的值之一:
      NIM_ADD:       添加一个图标到任务栏。
      NIM_MODIFY:    修改状态栏区域的图标。
      NIM_DELETE:    删除状态栏区域的图标。
      NIM_SETFOCUS:  将焦点返回到任务栏通知区域。当完成用户界面操做时,任务栏图标必须用此消息。例如,若是任务栏图标正    
                      显示上下文菜单,但用户按下"ESCAPE"键取消操做,这时就必须用此消息将焦点返回到任务栏通知区域。
      NIM_SETVERSION:指示任务栏按照相应的动态库版本工做。 
第二个参数pnid是NOTIFYICONDATA结构的地址,其内容视dwMessage的值而定。这个结构在SHELLAPI.H文件中定义以下: typedef struct _NOTIFYICONDATA {
  DWORD cbSize;           // 结构大小(sizeof struct),必须设置
  HWND hWnd;             // 发送通知消息的窗口句柄
  UINT uID;                //  图标ID ( 由回调函数的WPARAM 指定)
  UINT uFlags;           
  UINT uCallbackMessage;    // tray有事件发生时,向hWnd发送的消息ID,如鼠标按键消息
  HICON hIcon;             // 图标句柄
  CHAR szTip[64];          // 提示文本
} NOTIFYICONDATA;
uFlags的值:
#define NIF_MESSAGE 0x1   // 表示uCallbackMessage 有效
#define NIF_ICON    0x2   // 表示hIcon 有效
#define NIF_TIP     0x4   // 表示szTip 有效   ide

NOTIFYICONDATA结构中的 hWnd 是"拥有"图标的窗口句柄。
    uID能够是任何标示托盘图标的ID(若是有多个图标),通常使用资源ID。
    HIcon能够是任何图标的句柄,包括预约义的系统图标,如IDI_HAND、IDI_QUESTION、IDI_EXCLAMATION、或者Windows的徽标IDI_WINLOGO。
    当用户将鼠标移到图标上或者在图标上单击鼠标时,为了获得通知消息,你能够将本身的消息ID赋给uCallbackMessage,并设置NIF_MESSAGE标志。当用户在图标上移动或单击鼠标时,Windows将向hWnd指定的窗口发送消息uCallbackMessage,消息参数wParam即为uID的值,消息参数lParam为鼠标事件,如WM_LBUTTONDOWN等。 函数

有了以上的基础,你再去看网上的一些CTrayIcon类的时候,就不会那么费劲了。这个类能够到网上去找,不少的。好比搜索以下的关键字“系统托盘编程彻底指南(一)”
参考:    系统托盘编程彻底指南(一) 事件