FAQ:WinAPI VCPP:обработчик сообщения для нескольких элементов

Материал из Весельчак У
Версия от 19:52, 2 ноября 2008; RXL (обсуждение | вклад) (Разделение FAQ на статьи.)

(разн.) ← Предыдущая | Текущая версия (разн.) | Следующая → (разн.)
Перейти к: навигация, поиск

Как сделать обработчик сообщения для нескольких элементов управления сразу?

Без помощи визарда (Wizard) это можно сделать переопределением виртуальной функции OnCommand():

BOOL CMyDialog::OnCommand(WPARAM wParam, LPARAM lParam)
{
	//командное сообщение
	WORD wMess=(wParam >> 16);
 
	//ID элемента управления
	int nID=(int)(wParam &0x0000ffff));
 
	//хендл элемента управления
	HWND hW=(HWND)lParam;
 
	// смотрим, какой элемент управления
	switch (nID)
	{
		//CButton (кнопки, переключатели, флажки)
		case ID_BN1:
		case ID_BN2:
		case ID_BN3:
		{
			//смотрим, какое сообщение
			switch (wMess)
			{
				case BN_CLICKED:
				{
					...
				}
				break;
			}
		}
		break;
 
		//CEdit
		case ID_ED1:
		case ID_ED2:
		case ID_ED3:
		case ID_ED4:
		{
			// смотрим, какое сообщение
			switch (wMess)
			{
				case EN_CHANGE:
				{
					...
				}
				break;
 
				case EN_KILLFOCUS:
				{
					...
				}
				break;
			}
		}
		break;
	}
 
	return CDialog::OnCommand(wParam, lParam);
}