GetMessage是否需要GUI

时间:2010-12-22 13:13:10

标签: windows winapi user-interface

多年前我了解到,为了使用GetMessage,您需要某种形式的GUI。 没有它,windows不会创建消息队列。

我是否被错误地教导了?

编辑: MSDN说:因为系统将消息定向到应用程序中的各个窗口,所以线程必须在开始消息循环之前至少创建一个窗口。

看来我教的很好,还是有更多?

2 个答案:

答案 0 :(得分:5)

你在这里混淆了一些事情。

首先,您可以使用GetMessage而不在您的帖子中创建实时窗口。

OTOH OS默认情况下不会为新创建的线程创建消息队列。因此 - 对新创建的线程的调用PostThreadMessage可能会失败。

要强制创建消息队列,您需要调用任何应该在此线程的队列上运行的函数

简单来说,只需在该主题中调用PeekMessage

更多信息在这里: http://msdn.microsoft.com/en-us/library/ms644946%28v=vs.85%29.aspx

(见备注)

答案 1 :(得分:0)

SendMessagePostMessage的调用需要HWND作为参数。如果您没有窗口,则不会有HWND,并且无论您是否有消息队列,都无法接收消息。

编辑:我收回了它。 GetMessage允许您为HWND传递N​​ULL参数,PostThreadMessage将在没有HWND的情况下将消息发布到队列。 PostMessage还允许HWND参数为NULL。

我每天都学到新东西!