Win32程序通常有一个消息循环,循环调用 GetMessage 或 PeekMessage ,然后调用 DispatchMessage 将消息发送到窗口继续相关窗口。
但有没有必要真正做到这一点?我可以直接在消息循环中直接查看 MSG 对象并执行其中所需的操作,而无需调用 DispatchMessage 吗?我说的是我有一个窗口而没有其他窗口控件的情况,例如,如果窗口仅用作direct3d显示窗口,那么消息将始终指向唯一的窗口。
大多数情况下,我只是好奇,但也可能导致我的代码的某些方面也更清晰。
答案 0 :(得分:12)
您调用DispatchMessage
将消息传递到正确的窗口,即“窗口过程”。你认为你只有一个窗口,但它真的是唯一一个窗口吗? COM
将创建辅助窗口,其他子系统也可能创建辅助隐藏窗口,谁将发送发布到共享消息队列的消息并发送到这些窗口。无需仔细考虑这些细节,您就可以使用API来发送它们。而且你必须这样做,因为那些子系统依赖于消息泵的存在。
Spy++
Windows SDK工具可以帮助您查看实际拥有的窗口数。
如果您确实拥有唯一的窗口,那么无论您是从DispatchMessage内部调用处理程序还是直接通过消息泵调用处理程序,都没有多大区别。