12

Win32 程序一般都有一个消息循环,循环调用GetMessagePeekMessage,然后调用DispatchMessage将消息分派到相关窗口的窗口进程。

但是有必要实际这样做吗?我是否可以直接在消息循环中查看MSG对象并在那里执行所需的操作而不调用DispatchMessage?我说的是我只有一个窗口而没有其他窗口控件的情况,例如,如果该窗口仅用作 direct3d 显示窗口,那么消息将始终指向唯一的窗口。

大多数情况下我只是好奇,但它也可能导致我的代码的某些方面也更干净。

4

1 回答 1

13

您调用DispatchMessage将消息传递到正确的窗口,即其“窗口进程”。你以为你只有一扇窗,但它真的只有一扇吗?COM将创建助手窗口,其他子系统也可能创建助手隐藏窗口,谁将传递发布到共享消息队列并寻址到这些窗口的消息。无需过多考虑这些细节,您就可以使用 API 来调度它们。你必须这样做,因为这些子系统依赖于消息泵的存在。

Spy++Windows SDK 工具可能会帮助您查看您真正拥有的窗口数量。

尽管如此,如果您确实有唯一的窗口,那么无论您的处理程序是从 DispatchMessage 内部调用还是直接由您的消息泵调用,都没有太大区别。

于 2012-09-05T13:37:35.533 回答