Создание пиктограммы на панели задач.
Для создания пиктограммы на панели задач необходимо создать и заполнить
структуру:
NOTIFYICONDATA tnid;
заполняем размер структуры
tnid.cbSize = sizeof(NOTIFYICONDATA);
получаем дискриптор родительского окна (здесь для MFC)
tnid.hWnd =GetSafeHwnd( );
устанавливаем номер пиктограмы
tnid.uID = 222;
устаеавливаем флаги поддержки изображения пиктограммы, сообщений и
подсказок (ToolTips)
tnid.uFlags = NIF_MESSAGE | NIF_ICON | NIF_TIP;
устанавливаем сообщение, которое будет посылаться родительскому окну
при событии мыши в области пиктограммы (о сообщении ниже)
tnid.uCallbackMessage = WM_MYNOTIFYICON;
дискриптор пиктограммы
tnid.hIcon = m_hIcon;
текст подсказки
lstrcpyn(tnid.szTip, "This is tool tip", sizeof(tnid.szTip));
отбражаем пиктограмму
Shell_NotifyIcon(NIM_ADD, &tnid);
Для того чтобы ее убрать необходимо заполнить первые два поля структуры
и вызвать
Shell_NotifyIcon(NIM_DELETE, &tnid);
Для обработки вашего сообщения необходимо следующее:
а) Добавить обработчик в карту сообщений заголовочного файла
//{{AFX_MSG(CCoolDlg)
afx_msg LRESULT OnMynotifyicon(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
б) создать частное сообщение в файле реализации
UINT WM_MYNOTIFYICON=RegisterWindowMessage("MASSAGE_ICONNOTIFY");
в) там же исправить карту сообщений
BEGIN_MESSAGE_MAP(CCoolDlg, CDialog)
//{{AFX_MSG_MAP(CCoolDlg)
ON_REGISTERED_MESSAGE(WM_MYNOTIFYICON, OnMynotifyicon)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()
г) теперь осталось написать функция обработки сообщений от пиктограмки:
LRESULT <ВашКласс>::OnMynotifyicon(WPARAM wParam, LPARAM lParam)
{
UINT uID; //номер пиктограмки
UINT uMouseMsg; //сообщение
uID = (UINT) wParam;
uMouseMsg = (UINT) lParam;
if (uMouseMsg == WM_LBUTTONDOWN) //определение какое именно сообщение
AfxMessageBox("");
return 1;
}