【问题标题】:Does GetMessage need a GUIGetMessage 是否需要 GUI
【发布时间】:2010-12-22 13:13:09
【问题描述】:

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

我教错了吗?

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

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

【问题讨论】:

  • 我会将该 MSDN 声明视为建议,而不是要求。 Windows 本身不会在没有窗口的情况下向您发送任何消息,但是您自己的程序可以向自己发送消息,例如从另一个线程。我也想知道像 SetTimer 这样允许空 HWND 参数的调用。

标签: windows winapi user-interface


【解决方案1】:

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

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

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

要强制创建消息队列,您需要从该线程调用应该对该线程的队列进行操作的任何函数。

简单来说,只需在该线程中调用PeekMessage

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

(见备注)

【讨论】:

    【解决方案2】:

    SendMessagePostMessage 的调用需要参数的HWND。没有窗口就没有HWND,不管有没有消息队列都收不到消息。

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

    我每天都在学习新东西!

    【讨论】:

    • 不完全正确。有无窗口消息(COM 会这样做)。
    猜你喜欢
    • 1970-01-01
    • 2015-01-10
    • 2020-11-06
    • 2012-01-27
    • 2021-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多