关于Windows:在Win32程序中调用DispatchMessage是否必要?

Is calling DispatchMessage in win32 programs necessary?

Win32程序通常具有一个消息循环,该循环循环调用GetMessage或PeekMessage,然后调用DispatchMessage将消息分派到相关窗口的窗口过程中。

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

大多数情况下,我只是很好奇,但这也可能导致代码的某些方面变得更加清晰。


您调用DispatchMessage将消息传递到适当的窗口,并传递到其"窗口proc"。 您认为您只有一个窗口,但它真的是唯一的一个吗? COM将创建帮助程序窗口,其他子系统也可能创建帮助程序隐藏窗口,后者将传递张贴到共享消息队列并发送到这些窗口的消息。 无需过多考虑这些细节,您就可以使用API来分派它们。 而且您必须这样做,因为那些子系统依赖于消息泵的存在。

Spy++ Windows SDK工具可能会帮助您查看您实际上拥有多少个窗口。

即使确实只有一个窗口,无论是从DispatchMessage内部调用处理程序还是直接由消息泵调用处理程序,都没有太大的区别。