-
-
[讨论]TranslateMessage的作用
-
发表于:
2015-9-30 16:28
10145
-
一般的消息循环是这样写的
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
下边这段话是MSDN对TranslateMessage的解释,
The TranslateMessage function translates virtual-key messages into character messages. The character messages are posted to the calling thread's message queue, to be read the next time the thread calls the GetMessage or PeekMessage function.
TranslateMessage函数把虚拟键消息转换成字符消息,该字符消息被送到正在被调用的线程消息列队,并在这个线程下一次调用 GetMessage 或PeekMessage 时被读出;
这就是说TranslateMessage并不改变msg结构里的数据,而 TranslateMessage执行完了以后马上又调DispatchMessage(&msg); 那么窗口过程收到的消息根本与TranslateMessage无关
其次,TranslateMessage将消息传回消息列队,那么本来被GetMessage清空的消息列队又被TranslateMessage填满,系统以后传过来的消息没地方放,程序为什么不卡死
再有TranslateMessage把消息放到消息列队,GetMessage又从消息列队把这个消息拿出来,然后又再传给TranslateMessage,TranslateMessage又把它放到消息列队,这不是再绕圈圈吗,而这个消息在这里翻译来翻译去,翻译到最后会翻译出个什么东东来?微软的是不是疯子啊
[课程]FART 脱壳王!加量不加价!FART作者讲授!