win32应用程序是否有一个消息循环?或者每个窗口是一个消息循环?

时间:2013-08-07 18:51:58

标签: c++ c winapi

我对win32编程中的消息循环如何工作有点困惑。在我的WinMain中,我总是提出以下内容:

while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
{
    TranslateMessage ( &msg );
    DispatchMessage ( &msg );
}

这是一个while循环,几乎会在你的应用程序停止之前运行。这是否意味着每个应用程序而不是每个窗口都有一个消息循环?

1 个答案:

答案 0 :(得分:13)

来自About Messages and Message Queues

  

具有多个线程的应用程序可以在每个创建窗口的线程中包含一个消息循环。

请注意,消息队列CAN支持多个窗口... GetMessage的第二个参数是您要查看消息的窗口的句柄。如果是NULL那么线程的所有窗口。

作为第二个注释,可以创建一个没有窗口的消息队列(至少从Windows 2000开始)。它在PostThreadMessage

的文档中进行了描述
  

在邮件将发布到的帖子中,如此处所示调用PeekMessage以强制系统创建邮件队列。

PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)