【VC++】PeekMessage的问题

下面这是Petzold的Windows程序设计一书中第五章绘图基础的一段话,请教达人指点。翻译如下:尽管Windows文件上说,您不能用PeekMessage从消息队列中... 下面这是Petzold的Windows程序设计一书中第五章绘图基础的一段话,请教达人指点。翻译如下:

尽管Windows文件上说,您不能用PeekMessage从消息队列中删除WM_PAINT消息,但是这并不是什么大不了的问题。毕竟,GetMessage并不从消息队列中删除WM_PAINT消息。从队列中删除WM_PAINT消息的唯一方法是令窗口显示区域的失效区域变得有效,这可以用ValidateRect和ValidateRgn或者BeginPaint和EndPaint对来完成。如果您在使用PeekMessage从队列中取出WM_PAINT消息后,同平常一样处理它,那么就不会有问题了。所不能作的是使用如下所示的程序代码来清除消息队列中的所有消息:

while (PeekMessage (&msg, NULL, 0, 0, PM_REMOVE)) ;

这行叙述从消息队列中删除WM_PAINT之外的所有消息。如果队列中有一个WM_PAINT消息,程序就会永远地陷在while循环中。)

请问,为什么最后会永远的陷入while循环中??我没看懂啊
展开
 我来答
百度网友956912122
2009-06-18 · TA获得超过334个赞
知道小有建树答主
回答量:253
采纳率:0%
帮助的人:268万
展开全部
应该这样理解,因为如果有一个WM_PAINT消息的时候,一次调用PeekMessage将会返回一个非零值,因此循环继续,而因为WM_PAINT消息没有被删除,那么PeekMessage又返回一个非零值,这样一直下去不就是一个死循环吗.由于WM_PAINT不会被删除,因此每一次返回值都是非零的,这样就没有了结束条件.
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式