以下是经典的消息循环。正如MSDN所说,TranslateMessage(const MSG*)确实将虚拟密钥消息(WM_KEYDOWN
)转换为字符消息(WM_CHAR
)。然后它会将这个刚刚翻译好的WM_CHAR
消息发布到线程消息队列中。
AFAIK消息队列应该是 FIFO 结构,当WM_CHAR
返回时,消息TranslateMessage
将在队列末尾发送。我做了一个实验,同时按下多个键,例如'a','s'和'd'。在调用sleep(1000)
之前,我先放置一个WM_KEYDOWN
使这3条TranslateMessage()
条消息在消息队列中排队。
while (GetMessage(&msg, NULL, 0, 0))
{
Sleep(1000) // make message queue receives all the WM_KEYDOWN before Translated
TranslateMessage(&msg);
DispatchMessage(&msg);
}
LRESULT CALLBACK WindowProc(HWND hwnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
{
print_the_message(uMsg, wParam);
}
我希望订购
但是print_the_message实际上显示了这种排序
WM_CHAR
创建的字符消息TranslateMessage
是否具有特殊优先级或处理能力,使其能够遵循先前的WM_KEYDOWN
消息并切入队列?
答案 0 :(得分:1)