我试图理解“消息循环”。这是它的外观:
MSG msg = { };
while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
到目前为止,我对这个概念很清楚(至少我希望如此)。当用户使用键盘和鼠标与 Windows 应用程序交互时,这些事件被相应的设备驱动程序转换为适当的消息并发布到系统消息队列。
操作系统从队列中逐一删除消息并检查它们中的每一个以将它们发送到负责创建目标窗口的相应应用程序线程的队列。
现在在我的应用程序中
MSG msg;
GetMessage(&msg, NULL, 0, 0);
从线程特定的消息队列中删除消息并填充 MSG 结构。
但是TranslateMessage
据说将虚拟击键转换为字符并将它们发送回调用者线程的消息队列。
DispatchMessage
指示 OS 调用适当的目标窗口的 Windows 过程。
两个疑惑:
1)TranslateMessage的确切功能是什么;是否只是将虚拟击键转换为字符消息(我假设虚拟击键是字母和数字以外的击键),如果字符消息被发送回队列,循环是否中断?
2)鼠标事件呢?它们是直接调度的吗?