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

bod*_*ydo 11 c c++ winapi

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

while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
{
    TranslateMessage ( &msg );
    DispatchMessage ( &msg );
}
Run Code Online (Sandbox Code Playgroud)

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

xan*_*tos 13

关于消息和消息队列:

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

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

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

在将消息发布到的线程中,PeekMessage如此处所示调用以强制系统创建消息队列.

PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)
Run Code Online (Sandbox Code Playgroud)