【发布时间】:2013-08-07 18:51:58
【问题描述】:
我对消息循环在 win32 编程中的工作方式有点困惑。在我的WinMain 中,我总是输入以下内容:
while ( GetMessage ( &msg, NULL, 0, 0 ) > 0 )
{
TranslateMessage ( &msg );
DispatchMessage ( &msg );
}
这是一个 while 循环,它几乎会一直运行到您的应用程序停止为止。这是否意味着每个应用程序而不是每个窗口都有一个消息循环?
【问题讨论】:
-
每个需要它的线程一个。您可以拥有由该线程驱动的任意数量的窗口。
-
每个线程最多有一个消息队列。通常你只为每个消息队列设置一个消息循环。对话框使用嵌套的消息循环,大多数情况下对客户端是不可见的;暂时不用担心。
GetMessage从线程的消息队列中返回第一条消息。TranslateMessage将虚拟键消息转换为字符消息(WM_CHAR,WM_DEADCHAR,...)。魔法发生在DispatchMessage内部。它将消息传递到正确的窗口的窗口过程并管理所有内容,以便消息到达正确的接收者。