Типичный цикл сообщений C ++ выглядит следующим образом
MSG msg;
while (GetMessage(&msg, null, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
Функция TranslateMessage - генерировать сообщения WM_CHAR из сообщений WM_KEYDOWN, поэтому, если вы хотите видеть сообщения WM_CHAR, вы должны обязательно передавать ему сообщения WM_KEYDOWN. Если вас не интересуют сообщения WM_CHAR, вы можете пропустить это и сделать что-то вроде этого.
extern void OnKeyDown(WPARAM key);
extern void OnKeyUp(WPARAM key);
MSG msg;
while (GetMessage(&msg, null, 0, 0))
{
if (msg.message == WM_KEYDOWN)
OnKeyDown (msg.wParam);
else (msg.message == WM_KEYUP)
OnKeyUp(msg.wParam);
else
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
}
Обратите внимание, что сообщения OnKeyDown и OnKeyUp определены как принимающие WPARAM, а не символ. Это связано с тем, что значения WM_KEYDOWN и WM_KEYUP не ограничиваются значениями, которые помещаются в символ. См. WM_KEYDOWN