GetMessage是否需要GUI?

很多年前,我了解到为了使用GetMessage,你需要某种forms的GUI。 没有它,windows不会创build消息队列。

我错了吗?

编辑:MSDN说: 由于系统将消息引导到应用程序中的单个窗口,一个线程必须至less创build一个窗口,然后才能开始其消息循环。

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

你在这里混淆了一些东西。

首先,您可以使用GetMessage而无需在线程中创建实时窗口。

OTOH操作系统默认情况下不会为新创建的线程创建消息队列。 因此 – 像新线程PostThreadMessage调用可能会失败。

为了强制创建消息队列,你需要调用任何应该在这个线程上运行的函数。

简而言之,只需在该线程中调用PeekMessage

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

(见备注)

对SendMessage和PostMessage的调用需要一个参数的HWND。 如果没有窗口,则不会有HWND,无论是否有消息队列,都无法接收消息。

编辑:我收回。 GetMessage允许您为HWND传递一个NULL参数,而PostThreadMessage会在没有HWND的情况下向队列发送消息。 PostMessage也允许HWND参数为NULL。

我每天都会学到新的东西!