FAQ:WinAPI VCPP:обработка нажания клавиш в CDialog — различия между версиями
Материал из Весельчак У
RXL (обсуждение | вклад) (Новая: ===Как в CDialog-based классе получить коды клавиш, которые нажимает пользователь? Пробовал добавлять обрабо...) |
(нет различий)
|
Версия 20:28, 31 июля 2008
Как в CDialog-based классе получить коды клавиш, которые нажимает пользователь? Пробовал добавлять обработчики OnChar() и OnKeyDown(), но эти обработчики вообще не вызываются.
Диалоги действительно не обрабатывают OnChar() и OnKeyDown(). По этому нужно ловить сообщения WM_CHAR и WM_KEYDOWN в виртуальной PreTranslateMessage().
BOOL CMyDialog::PreTranslateMessage(MSG* pMsg) { if (pMsg->message == WM_KEYDOWN) { // pMsg->wParam - код клавиши // pMsg->hwnd - хендл контрола окна, который получил сообщение // pMsg->lParam - дополнительная информация: // биты 0...15 - количество повторов // биты 16...23 - скан-код // бит 24 -установлен, если нажат правый Ctrl } if (pMsg->message == WM_CHAR) { // pMsg - всё аналогично WM_KEYDOWN } return CDialog::PreTranslateMessage(pMsg); }