在程序的调试版本中,我创建了一个可见窗口,WM_QUERYENDSESSION
收到了WNDPROC
消息。在发布版本中,窗口应该是仅消息的,因此我在调用HWND_MESSAGE
时将hWndParent
指定为CreateWindowEx()
。不幸的是,我不再收到WM_QUERYENDSESSION
消息了。是WM_QUERYENDSESSION
提到的here广播消息之一吗? “仅消息窗口[...]不接收广播消息。”
答案 0 :(得分:5)
MSDN为“仅消息窗口”提供了一个不错的定义:
仅限消息窗口可让您发送和接收消息。它不可见,没有z顺序,无法枚举,并且不接收广播消息。该窗口只是发送消息。
突出显示相关细节。
您可以使用它们来利用自己代码中的消息调度机制。最常见的是让工作线程以线程安全的方式与UI线程通信。消息循环是生产者 - 消费者问题的通用解决方案。 COM中的公寓编组实现了一个仅消息窗口。显然,这样的窗口应该是隐藏的,只能获取应用程序定义的消息。
调用CreateWindowEx时,请勿将HWND_MESSAGE用作hWndParent。
答案 1 :(得分:2)
对于hWndParent,将HWND_MESSAGE替换为NULL,您应该得到您想要的行为。