关于GetMessage函数的一点问题

While(true){if(GetMessage(&msg,NULL,0,0))break;TranslateMessage(&msg);DispatchMessage... While(true)
{
if(GetMessage(&msg,NULL,0,0))
break;
TranslateMessage(&msg);
DispatchMessage(&msg);
}
这段代码会有一个问题,就是当程序收到一个WM_QUIT时,虽然窗口是结束了,但在任务管理器里面仍然可以看到该程序的进程在运行,为什么?
if(!(GetMessage(&msg,NULL,0,0)))这里有个“!”被我整掉了,是我大意了,另外,MSDN各位也用不着给我翻译,我都看过了,希望对这个地方理解比较到位的高人指点下
展开
 我来答
676465423
2009-06-06 · 超过26用户采纳过TA的回答
知道答主
回答量:50
采纳率:0%
帮助的人:0
展开全部
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;
匿名用户
2009-06-05
展开全部
你那样写居然能运行正常???

while (GetMessage(&msg, NULL, 0, 0))
{
TranslateMessage(&msg);
DispatchMessage(&msg);
}
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式