關於系統托盤的原理

網上有不少關於系統托盤的程序。可是說的似是而非,特別是那個參數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類的時候,就不會那麼費勁了。這個類能夠到網上去找,不少的。好比搜索以下的關鍵字「系統托盤編程徹底指南(一)」
參考:    系統托盤編程徹底指南(一) 事件

相關文章
相關標籤/搜索