关于GetMessage函数的一点问题

来源:百度知道 编辑:UC知道 时间:2024/06/04 10:31:25
While(true)
{
if(GetMessage(&msg,NULL,0,0))
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
这段代码会有一个问题,就是当程序收到一个WM_QUIT时,虽然窗口是结束了,但在任务管理器里面仍然可以看到该程序的进程在运行,为什么?
if(!(GetMessage(&msg,NULL,0,0)))这里有个“!”被我整掉了,是我大意了,另外,MSDN各位也用不着给我翻译,我都看过了,希望对这个地方理解比较到位的高人指点下

While(true)
{
if(!(GetMessage(&msg,NULL,0,0)))
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}

GetMessage函数收到WM_QUIT时,返回0.
GetMessage函数收到其他消息,返回非零

MSDN的解释
If the function retrieves a message other than WM_QUIT, the return value is nonzero.
If the function retrieves the WM_QUIT message, the return value is zero.

当收到WM_QUIT时,IF语句并没有执行,所以并没有退出循环.
当收到其他消息就退出了循环

如果你是这么写的
那么在收到WM_DESTROY消息时,做如下处理
case WM_DESTROY:
PostQuitMessage(0);
break;

你那样写居然能运行正常???

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