Вы обращали внимание на то, что у всех икон в SysTray существует подсказка ? Для её существования необходимо в структуру заполнить поле посказки, правильно выставить флаги.
void CTestSystrayDlg::OnButton1() { NOTIFYICONDATA nf; nf.hWnd = m_hWnd; nf.uID = NULL; nf.uFlags = NIF_ICON | NIF_MESSAGE | NIF_TIP; nf.uCallbackMessage = WM_MYICONNOTIFY; strcpy(nf.szTip,"Hello Systray"); HICON hIcon; hIcon=AfxGetApp()->LoadIcon(IDR_MAINFRAME); nf.hIcon = hIcon; Shell_NotifyIcon(NIM_ADD,&nf); }Я хочу и получать сообщения в окно при двойном щелчке на кнопке. Для этого необходимо завести свое сообщение.
//{{NO_DEPENDENCIES}} // Microsoft Developer Studio generated include file. // Used by TestSystray.rc // ........ #define IDC_BUTTON2 1001 #define WM_MYICONNOTIFY WM_USER+1 // Next default values for new objects // .......Передать его в структуру.
nf.uCallbackMessage = WM_MYICONNOTIFY;Описать реакцию на него в карте сообщений
BEGIN_MESSAGE_MAP(CTestSystrayDlg, CDialog) ...... //}}AFX_MSG_MAP ON_MESSAGE(WM_MYICONNOTIFY,OnIcon) END_MESSAGE_MAP()Описать функцию, которая будет вызвана в ответ на это сообщение
///////////////////////////////////////////////// // CTestSystrayDlg dialog class CTestSystrayDlg : public CDialog { // Construction public: void OnIcon(WPARAM wp, LPARAM lp); ...... };
И её реализацию проверим LPARAM на тип сообщений:
void CTestSystrayDlg::OnIcon(WPARAM wp, LPARAM lp) { if (lp==515) AfxMessageBox("Click"); }
Код этой функции будет вызываться на любое сообщение. А вот 512 - это двойной щелчок.
Собирайте приложение. Создайте иконку в SysTray щелкните на неё два раза и ваше диалоговое окно среагирует.