通過Shell_NotifyIcon將圖標安裝到系統托盤後,此圖標將成爲對話框UI的擴展。當用戶與此圖標交互時,操作系統會自動將UI消息重定向到您的對話框。
爲您服務,需要執行幾個步驟,這些用戶消息:
(1)添加消息處理程序定義(ON_MESSAGE(WM_TRAY_NOTIFY,OnTrayNotify))的(的.cpp)文件中。必須是BEGIN_MESSAGE_MAP/END_MESSAGE_MAP塊內:
BEGIN_MESSAGE_MAP(CTestDlg, CDialog)
//{{AFX_MSG_MAP(CTestDlg)
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
...
//}}AFX_MSG_MAP
ON_MESSAGE(WM_TRAY_NOTIFY, OnTrayNotify)
END_MESSAGE_MAP()
(2)添加消息處理程序實現在(的.cpp)文件,來執行實際工作
void CTestDlg::OnTrayNotify(UINT nID, LPARAM lEvent)
{
if (nID==TRAYICON_ID1)
{
// handle messages here
if (lEvent==WM_LBUTTONDBLCLK)
{ // do left button double click, usually restore application
}
if (lEvent==WM_RBUTTONUP)
{ // do right button up, usually popup a menu at clicked location
}
}
}
(3)添加的原型(.h)文件中的此消息處理函數的定義(afx_msg void OnTrayNotify(UINT nID,LPARAM lEvent);)。必須是BEGIN_MESSAGE_MAP/END_MESSAGE_MAP塊內:
// Generated message map functions
//{{AFX_MSG(CTestDlg)
virtual BOOL OnInitDialog();
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
...
//}}AFX_MSG
afx_msg void OnTrayNotify(UINT nID, LPARAM lEvent);
DECLARE_MESSAGE_MAP()
(4)添加定義內(.h)文件中
#define WM_TRAY_NOTIFY WM_USER+567
#define TRAYICON_ID1 0x1234
上述代碼是假設:
- 對話框名稱是CTestDlg,將其更改爲您的對話框名稱
- 用於設置Shell_NotifyIcon的用戶回調消息標識符(uCallbackMessage)是WM_TRAY_NOTIFY
- sed的設置Shell_NotifyIcon托盤圖標(UID)的標識符是TRAYICON_ID1
來源
2013-01-17 21:30:32
mfc
不用擔心消息循環(後面的場景的東西)。搜索並學習如何製作消息映射條目並處理由托盤圖標發送的消息... – Sivaraman