A typical C ++ message loop is as follows
MSG msg; while (GetMessage(&msg, null, 0, 0)) { TranslateMessage(&msg); DispatchMessage(&msg); }
The TranslateMessage function is to generate WM_CHAR messages from WM_KEYDOWN messages, so if you want to see WM_CHAR messages, you must send WM_KEYDOWN messages to it. If you are not interested in WM_CHAR messages, you can skip this and do something similar.
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 if (msg.message == WM_KEYUP) OnKeyUp(msg.wParam); else { TranslateMessage(&msg); DispatchMessage(&msg); } }
Note that OnKeyDown and OnKeyUp messages are defined as receiving WPARAM, not a character. This is because the values ββfor WM_KEYDOWN and WM_KEYUP are not limited to the values ββthat are placed in the character. See WM_KEYDOWN
More details:
Using messages and message queues
https://docs.microsoft.com/en-us/windows/win32/winmsg/using-messages-and-message-queues
source share