WM_PAINT消息总结
2013-09-12 11:24
302 查看
由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擦除覆盖了部分窗口的对话框或消息框。
菜单下拉出来,然后被释放。
显示工具提示消息。
相关文章推荐
- 深度分析WM_PAINT和WM_ERASEBKGND消息
- WM_Paint消息小結
- WM_PAINT消息处理过程
- WM_PAINT消息
- MFC学习总结(一):SM_CXSIZE的默认大小和WM_SIZE、WM_PAINT的发送顺序。
- Win32 SDK基础(12)—— WM_PAINT消息的处理
- wm_paint 消息详细解析
- UpdateWindow的作用和WM_PAINT消息的产生时机
- MFC中窗口收到WM_PAINT消息是如何处理的,什么情况下产生WM_PAINT消息
- 系统何时发送WM_PAINT消息?
- 【消息反射】WM_NOTIFY与消息反射【总结】
- 关于WM_PAINT消息
- wm_paint 消息详细解析
- WM_Paint 消息详解
- DoModal 的调用会发送 WM_INITDIALOG 消息 WM_ERASEBKG 先于WM_PAINT
- 无效区域 更新区域 重画 WM_PAINT 的关系和机制(转载总结)
- WM_PAINT 和 WM_ERASEBKGND 消息的区别
- 使用WM_PASTE 和 WM_CHAR 消息时中文乱码总结
- WM_PAINT 和 WM_ERASEBKGND 消息的区别 .
- MFC 消息之WM_CTLCOLOR和OnCtlColor消息的使用方法总结