Я не часто работаю с Winapi, я пишу почти. NET код.Но в настоящее время я должен использовать winapi, чтобы сделать простой диалог.Там я хочу справиться с некоторыми ключевыми событиями.Поэтому я наблюдал за соответствующим сообщением обратного вызова WM_KEYDOWN
или WM_KEYUP
на MSDN и добавил его в свою функцию обратного вызова.
INT_PTR CALLBACK cbfunc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) {
switch(message) {
// ...
case WM_KEYUP:
MMsgBox("up"); // I never get here
return 0;
case WM_KEYDOWN:
MMsgBox("down"); // I never get here
return 0;
// ...
}
return 0;
}
Но ни WM_KEYUP
, ни WM_KEYDOWN
никогдаполучить срабатывание.Тогда я заявил, что ищу решение этой проблемы.Я думал, что мой диалог съест это сообщение.Поэтому я добавил:
case WM_GETDLGCODE:
return DLGC_WANTALLKEYS;
В результате это не помогает.Другие решения, которые я нашел, были следующие:
- В качестве альтернативы можно использовать событие
WM_GETDLGCODE
для обработки этих ключей, как предложено для здесь . - .нашел много потоков (например, this ), говорящих о методе с именем
PreTranslateMessage
.Но у меня даже нет этого класса, потому что я просто создаю свой диалог, используя DialogBoxParam
Так что ни один из них не работал для меня.Сейчас я понятия не имею, как с этим справиться.Что-то, что я заметил, это то, что при нажатии клавиш появляется сообщение WM_COMMAND
.
С уважением Nem.