仅消息窗口是否可以接收WM_QUERYENDSESSION?

时间:2014-01-15 15:16:57

标签: windows winapi

在程序的调试版本中,我创建了一个可见窗口,WM_QUERYENDSESSION收到了WNDPROC消息。在发布版本中,窗口应该是仅消息的,因此我在调用HWND_MESSAGE时将hWndParent指定为CreateWindowEx()。不幸的是,我不再收到WM_QUERYENDSESSION消息了。是WM_QUERYENDSESSION提到的here广播消息之一吗? “仅消息窗口[...]不接收广播消息。”

2 个答案:

答案 0 :(得分:5)

MSDN为“仅消息窗口”提供了一个不错的定义:

  

仅限消息窗口可让您发送和接收消息。它不可见,没有z顺序,无法枚举,并且不接收广播消息。该窗口只是发送消息。

突出显示相关细节。

您可以使用它们来利用自己代码中的消息调度机制。最常见的是让工作线程以线程安全的方式与UI线程通信。消息循环是生产者 - 消费者问题的通用解决方案。 COM中的公寓编组实现了一个仅消息窗口。显然,这样的窗口应该是隐藏的,只能获取应用程序定义的消息。

调用CreateWindowEx时,请勿将HWND_MESSAGE用作hWndParent。

答案 1 :(得分:2)

对于hWndParent,将HWND_MESSAGE替换为NULL,您应该得到您想要的行为。