WM_KEYDOWN не отвечает

В случае WM_KEYDOWN имеет messagebox() для того, чтобы понять функциональность этого дела.

кто-нибудь может помочь мне, почему этот случай не ответил?

Я пытаюсь сделать отладку, пока я вставляю письмо с клавиатуры, а отладчик не приходит в WM_KEYDOWN дело.

Спасибо всем!

это мой код:

LRESULT CALLBACK WndProc( HWND hwnd, UINT msg, WPARAM wParam, LPARAM lParam )
{
switch( msg )
{
case WM_CREATE:
break;
case WM_COMMAND:
break;
case WM_KEYDOWN:
MessageBox(NULL,L"test",L"Information",MB_ICONINFORMATION);
break;
case WM_DESTROY:
// DESTROY WINDOW
break;
default:
return DefWindowProc( hwnd, msg, wParam, lParam );
}
return  0;
}

0

Решение

MessageBox() отображает всплывающее диалоговое окно, а затем запускает собственный модальный цикл обработки сообщений для обслуживания сообщений для этого диалогового окна до его закрытия. Пока диалог активен, ваши нажатия клавиш переходят в этот диалог, а не в окно, в котором WndProc() принадлежит. Вот почему вы не получаете больше WM_KEYDOWN Сообщения. Вы не должны использовать MessageBox() как инструмент отладки для сообщений пользовательского интерфейса, потому что он изменяет поток сообщений пользовательского интерфейса. использование OutputDebugString() вместо. Таким образом, ваш отладчик (или внешний просмотрщик, такой как SysInternals DebugView) может отображать ваши сообщения отладки, не влияя на поведение вашего пользовательского интерфейса.

3

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]