1. 程式人生 > >windows程式托盤圖示以及訊息提示--基本知識(NOTIFYICONDATA)

windows程式托盤圖示以及訊息提示--基本知識(NOTIFYICONDATA)

首先介紹一下基本知識:
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;
} NOTIFYICONDATA, *PNOTIFYICONDATA;

cbSize
按位元組計算的結構體。

hWnd
接收通知區域訊息的視窗控制代碼。

uID
應用程式定義的工作列圖示的ID。Shell使用視窗控制代碼+uID或者GUID的方式來標識Shell_使用到的圖示。你可以使用不同的uID來把多個圖示關聯到一個視窗控制代碼上。如果指定了GUID,那麼uID就會被忽略。

uFlags
一個標誌,用來表示結構體中剩下的欄位哪些是可用的,或者提供提示條應當如何顯示的 附加資訊。可以是下面一些值的組合:

uCallbackMessage
應用程式定義的訊息ID。系統使用這個ID向由hWnd指定的視窗傳送通知訊息。當滑鼠事件在圖示區域發生、滑鼠在圖示的相關區域晃悠時,傳送這個訊息;當用滑鼠或者鍵盤選中了圖示、或者這些行為發生在氣泡通知區域時,傳送訊息。

uVersion
當uVersion為0或者NOTIfYICON_VERSION時,訊息的wParam引數包含了發生事件的圖示的ID。這個ID可以是32位元組長。lParam引數包含了與該事件相關的滑鼠或者鍵盤訊息。例如,當滑鼠指標經過工作列圖示時,傳送WM_MOUSEMOVE訊息。
當uVersion為NOTIFYICON的時候,應用程式通過uCallbackMessage成員繼續接收應用程式自定義訊息的通知事件,但是lParam和wParam引數意義發生了改變:

hIcon
將要新增/修改/刪除的圖示控制代碼。
使用LoadIconMetric函式來確定裝載了正確的圖示並且被適當的縮放。

szTip
一個標準提示字串,以NULL結尾。包括結尾NULL字元,最多可以64個。
對於2000及其以後的版本,szTip可以容納包括NULL結尾在內的128個字元。

dwState
2000及其以後的系統支援此項。圖示的狀態。可以是下面的一個或者幾個值。

dwStateMask
2000及其以後的系統支援。指定了dwState的哪些位是可以被檢索或者修改的。取值和dwState相同。例如,dwStateMask設定了NIS_HIDDEN,則當圖示的共享位元組被忽略時,無論dwState是什麼值,只有MIS_HIDDEN狀態可以修改。(這塊英文沒看懂。)

szInfo
2000及其以後的系統支援。氣泡通知中顯示的文字,該文字以NULL結尾。最多可以有包括NULL在內的256個字元,但是因為要調整區域所以應該限制在200個以內。如果要從UI刪除氣泡通知,可以(用NIM_DELETE)刪除圖示,或者在uFlags中設定NIF_INFO並且設定szInfo為空字串。

uTimeout
在Vista中不贊成使用這個成員。通知顯示的時間現在基於系統的輔助功能設定。

hBalloonIcon
Vista及其之後的系統支援。程式提供的自定義通知圖示的控制代碼,必須獨立於通知區域圖示。如果這個欄位不為NULL,並且dwInfoFlags設定為NIF_USER,那麼這個圖示會被用作通知圖示。如果這個成員為NULL,合法的動作就是繼續執行。

同樣,你只要知道上訴結構體的存在即可,我們可以查詢msdn來了解每個成員如何賦值呢。這是windows程式托盤圖示的基本知識