1,自定義消息宏和NOTIFYICONDATA結構體
#define WM_NC (WM_USER+1001)
NOTIFYICONDATA NotifyIcon;
NOTIFYICONDATA結構包含了系統用來處理托盤圖示的資訊,它包括選擇的圖示、回調消息、提示消息、圖示對應的視窗等内容。其定義為:
typedef struct _NOTIFYICONDATA {
DWORD cbSize; //以位元組為機關的這個結構的大小
HWND hWnd; //接收托盤圖示通知消息的視窗句柄
UINT uID; //應用程式定義的該圖示的ID号
UINT uFlags; //設定該圖示的屬性
UINT uCallbackMessage;//應用程式定義的消息ID号,此消息傳遞給hWnd
HICON hIcon; //圖示的句柄
char szTip[64]; //滑鼠停留在圖示上顯示的提示資訊
DWORD dwState;
DWORD dwStateMask;
TCHAR szInfo[256];
union {
UINTuTimeout;
UINT uVersion;
};
TCHAR szInfoTitle[64];
DWORD dwInfoFlags;
GUID guidItem;
} NOTIFYICONDATA,*PNOTIFYICONDATA;
該結構中,成員uFlags可以使下列之一或組合:(此成員表明具體哪些其他成員為合法資料(即哪些成員起作用)。)
NIF_ICON 設定成員hIcon有效
NIF_MESSAGE 設定成員uCallbackMessage有效
NIF_TIP 設定成員szTip有效
NIF_STATE dwState和dwStateMask成員起作用。
NIF_INFO 使用氣球提示代替普通的工具提示框。szInfo, uTimeout, szInfoTitle和dwInfoFlags成員起作用。
NIF_GUID 保留。
uCallbackMessage
應用程式定義的消息标示。當托盤圖示區域發生滑鼠事件或者使用鍵盤選擇或激活圖示時,系統将使用此标示向由hWnd成員标示的視窗發送消息。消息響應函數的wParam參數标示了消息事件發生的工作列圖示,lParam參數根據事件的不同,包含了滑鼠或鍵盤的具體消息,例如當滑鼠指針移過托盤圖示時,lParam将為WM_MOUSEMOVE。
hIcon 增加、修改或删除的圖示的句柄。注意,windows不同版本對于圖示有不同要求。Windows XP可支援32位。
dwState
Version5.0,圖示的狀态,有兩個可選值,如下:
NIS_HIDDEN 圖示隐藏
NIS_SHAREDICON 圖示共享
dwStateMask
uTimeout
和uVersion成員為聯合體。uTimeout表示氣球提示逾時的時間,機關為毫秒,此時間後氣球提示将消失。系統預設氣球提示的逾時時間最小值為10秒,最大值為30秒。如果設定的uTimeout的值小于10将設定最小值,如果大于30将設定最大值。将逾時時間分為最大最小兩種,是因為解決不同圖示的氣球提示同時彈出的問題,
uVersion
Version5.0. 和uTimeout成員為聯合體。用來設定使用Windows95 還是 Windows 2000風格的圖示消息接口。請參考Shell_NotifyIcon函數的說明擷取更多資訊。隻有當使用Shell_NotifyIcon函數發送NIM_SETVERSION消息時,此成員才有作用。可選的值如下:
0 使用Windows95風格。針對Windows 2000版本之前的windows設計的軟體請使用 此值。
NOTIFYICON_VERSION 使用Windows2000風格。 針對Windows 2000版本以及以後版本的windows設計的軟體請使用此值。
szInfoTitle
Version5.0. 指向一個以\0結束的字元串的指針。字元串的内容為氣球提示的标題。此标題出現在氣球提示框的上部,最多含有63個字元。
dwInfoFlags
Version5.0. 設定此成員用來給氣球提示框增加一個圖示。增加的圖示出現在氣球提示标題的左側,注意如果szInfoTitle成員設為空字元串,則圖示也不會顯示。可選值如下:
NIIF_ERROR 錯誤圖示。
NIIF_INFO 資訊圖示。
NIIF_NONE 沒有圖示。
NIIF_USER 使用使用者使用hIcon成員指明的圖示,要求Windows XP Service Pack2 (SP2)或以後系統。
NIIF_WARNING 警告圖示。
NIIF_ICON_MASK Version 6.0. 保留。
NIIF_NOSOUND Version 6.0. 禁止播放相應聲音。
最小化視窗到托盤處實作函數:
void CMainFrame::MINHIDEWINDOW() //最小化到托盤處
{
NotifyIcon.cbSize=sizeof(NOTIFYICONDATA);
NotifyIcon.hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); //托盤圖示
NotifyIcon.hWnd=m_hWnd;
lstrcpy(NotifyIcon.szTip,_T("VC切分程式")); //提示資訊
NotifyIcon.uCallbackMessage=WM_NC; //消息
NotifyIcon.uFlags=NIF_ICON | NIF_MESSAGE | NIF_TIP;
Shell_NotifyIcon(NIM_ADD,&NotifyIcon); //繪制圖示
ShowWindow(SW_HIDE);
}
托盤圖示右鍵菜單實作:
//快捷菜單消息響應
void CMainFrame::OnNewMenu1()
{
ModifyStyleEx(0,WS_EX_TOPMOST); //視窗置頂
ShowWindow(SW_MAXIMIZE);
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon); //删除托盤圖示
}
退出
void CMainFrame::OnNewMenu2()
{
Shell_NotifyIcon(NIM_DELETE, &NotifyIcon); //删除托盤圖示
CMainFrame::OnClose();
}