您的位置:首页 > 大数据 > 人工智能

WM_PAINT消息总结

2013-09-12 11:24 302 查看



UpdateWindow()函数是让消息队列中的WM_PAINT消息立刻进入window procedure而得到处理,不是说

由UpdateWIndow()产生WM_PAINT消息,WM_PAINT消息是由于窗口中存在无效区域需要重汇而产生的。设

想一下如果你的客户区没有无效区域,你调用再多的UpdateWindow()也不能产生WM_PAINT消息,由于

WM_PAINT消息相对于其他消息优先级比较低(一般来说要等到其他消息处理完毕后才处理WM_PAINT消息

),所以通过UpdateWindow()函数的调用可以让 WM_PAINT消息立刻得到处理,UpdateWIndow()的作用

仅此而已。

1.当窗口出现无效区时,系统会自己发送这个消息,而用Invalidate或者InvalidateRect就会产生无效区

而发送WM_PAINT

2.Invalidate()、InvalidateRect()调用后系统会产生无效区,自动发WM_PAINT消息

3.改变窗口大小,或者窗口被遮挡(去除遮挡)时,窗口自动产生WM_PAINT消息重绘有变化的区域(无效

区)。

当你需要人工指定窗口重绘时,依此原理,可以指定窗口客户区的某些区域无效,让其重绘。

Invalidate指定整个客户区无效;

InvalidateRect和InvalidateRgn分别指定某个矩形或某区域无效。

这三个函数向窗口发送了WM_PAINT消息进入消息队列。当队列较长时(前面还有很多消息未处理),就

不能即时刷新了。

你可以在上面三个函数后加一句UpdateWindow(),这样就可以立即刷新窗口了。

类似功能的函数还有RedrawWindow等等。请参阅MSDN

4.大多数Windows程序在WinMain中进入消息循环之前的初始化期间都要呼叫函数UpdateWindow。Windows利

用这个机会给窗口消息处理程序发送第一个WM_PAINT消息。这个消息通知窗口消息处理程序:必须绘制

显示区域。此后,窗口消息处理程序应在任何时刻都准备好处理其它 WM_PAINT消息,必要的话,甚至重

新绘制窗口的整个显示区域。在发生下面几种事件之一时,窗口消息处理程序会接收到一个WM_PAINT消

息:

在使用者移动窗口或显示窗口时,窗口中先前被隐藏的区域重新可见。

 

使用者改变窗口的大小(如果窗口类别样式有着CS_HREDRAW和CS_VREDRAW位旗标的设定)。

 

程序使用ScrollWindow或ScrollDC函数滚动显示区域的一部分。

 

程序使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息。

 

在某些情况下,显示区域的一部分被临时覆盖,Windows试图保存一个显示区域,并在以后恢复它,但

这不一定能成功。在以下情况下,Windows可能发送WM_PAINT消息:

Windows擦除覆盖了部分窗口的对话框或消息框。

 

菜单下拉出来,然后被释放。

 

显示工具提示消息。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: