Windows什么时候停止发送WM_PAINT消息?

时间:2015-04-08 08:59:51

标签: c winapi

如果我窗口上的指定矩形无效(即需要绘制),则会在消息队列中发布WM_PAINT消息,如果我没有验证WM_PAINT中的矩形事件处理程序,然后将新的WM_PAINT消息发布到消息队列。

这是对的吗?

如果它是正确的,那么Windows如何知道不继续发送WM_PAINT消息,我的意思是Windows知道如何等到我完成处理WM_PAINT事件然后发送新事件如果我没有验证矩形,那么WM_PAINT消息,并且在我从消息队列中出列WM_PAINT消息后不直接发送新的WM_PAINT消息?

1 个答案:

答案 0 :(得分:2)

  

Windows如何知道等到我完成处理WM_PAINT事件,然后在我没有验证矩形的情况下发送新的WM_PAINT消息?

您可以通过调用WM_PAINT,然后绘画,然后调用BeginPaint来处理EndPaint。当您拨打EndPaint时,您绘制的区域会被标记为有效。

  

...并且在我从消息队列中取消WM_PAINT消息后不直接发送新的WM_PAINT消息?

Windows处理邮件队列时会生成WM_PAINT条消息。只有无效区域时,它才会生成WM_PAINT条消息。绘制完成后,不再有无效区域,因此不会生成WM_PAINT条消息。

请注意,Windows通常不会发送 WM_PAINT消息。这些是在应用程序的消息循环从消息队列中提取消息时检索的异步消息。例如,当您调用GetMessage并且消息队列为空,并且存在无效区域时,则会生成WM_PAINT条消息。

上述声明的例外情况是对UpdateWindowRedrawWindow的调用。在这些情况下,WM_PAINT消息将同步发送。来自documentation

  

当系统或其他应用程序请求绘制应用程序窗口的一部分时,将发送WM_PAINT消息。调用UpdateWindow或RedrawWindow函数时发送消息,或者当应用程序使用GetMessage或PeekMessage函数获取WM_PAINT消息时,通过DispatchMessage函数发送消息。