我对消息循环在 win32 编程中的工作方式有点困惑。在我的WinMain
我总是把以下内容:
while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
{
TranslateMessage ( &msg );
DispatchMessage ( &msg );
}
这是一个 while 循环,它几乎一直运行到您的应用程序停止为止。这是否意味着每个应用程序而不是每个窗口都有一个消息循环?
具有多个线程的应用程序可以在创建窗口的每个线程中包含一个消息循环。
请注意,消息队列可以支持多个窗口...的第二个参数GetMessage
是您要查看消息的窗口的句柄。如果NULL
然后线程的所有窗口。
作为第二个注意事项,可以在没有 Windows 的情况下创建消息队列(至少从 Windows 2000 开始)。它在以下文档中进行了描述PostThreadMessage
:
在将要发布消息的线程中,调用
PeekMessage
此处所示的方法来强制系统创建消息队列。
PeekMessage(&msg, NULL, WM_USER, WM_USER, PM_NOREMOVE)