我对win32编程中的消息循环如何工作有点困惑。在我的WinMain
中,我总是提出以下内容:
while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
{
TranslateMessage ( &msg );
DispatchMessage ( &msg );
}
这是一个while循环,几乎会在你的应用程序停止之前运行。这是否意味着每个应用程序而不是每个窗口都有一个消息循环?
答案 0 :(得分:13)
来自About Messages and Message Queues:
具有多个线程的应用程序可以在每个创建窗口的线程中包含一个消息循环。
请注意,消息队列CAN支持多个窗口... GetMessage
的第二个参数是您要查看消息的窗口的句柄。如果是NULL
那么线程的所有窗口。
作为第二个注释,可以创建一个没有窗口的消息队列(至少从Windows 2000开始)。它在PostThreadMessage
:
在邮件将发布到的帖子中,如此处所示调用
PeekMessage
以强制系统创建邮件队列。
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)