Шаг 108 - Развиваем SysTray

Вы обращали внимание на то, что у всех икон в 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 щелкните на неё два раза и ваше диалоговое окно среагирует.


Загрузить проект | Предыдущий Шаг | Следующий Шаг | Оглавление
Автор Каев Артем - 11.02.2000