После установки значка на панель задач с помощью Shell_NotifyIcon этот значок становится расширением вашего диалогового интерфейса. Когда пользователь взаимодействует с этим значком, сообщения пользовательского интерфейса будут автоматически перенаправляться ОС в ваш диалог.
Чтобы обслуживать эти пользовательские сообщения, вам необходимо выполнить несколько шагов:
(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) Добавьте определение прототипа этого обработчика сообщений (afx_msg void OnTrayNotify(UINT nID, LPARAM lEvent);) внутри файла (.h). Должен находиться внутри блока 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, измените его на свое имя диалога.
- Идентификатор сообщения обратного вызова пользователя (uCallbackMessage), используемый для настройки Shell_NotifyIcon, — WM_TRAY_NOTIFY.
- Идентификатор значка в трее (uID), переданный для настройки Shell_NotifyIcon, равен TRAYICON_ID1.
person
mfc
schedule
17.01.2013