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

Материал из Весельчак У

Перейти к: навигация, поиск

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

Без помощи визарда (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);
}