windows——消息——WM_PAINT
来源:互联网 发布:手机有算量软件吗 编辑:程序博客网 时间:2024/06/08 06:39
WM_PAINT
WM_PAINT通知窗口消息处理程序,窗口的全部或部分显示区域需要绘制
windows发送WM_PAINT情况:
- WinMain进入消息循环之前的初始化期间调用函数UpdateWindow
- 使用者移动窗口或显示窗口时,窗口中先前被隐藏的区域重现可见
- 使用者改变窗口大小(如果窗口类别样式有CS_HREDRAW和CS_VREDRAW位flag)
- 程序使用ScrollWindow或ScrollDC函数滚动显示区域一部分
- 程序使用InvalidateRect或InvalidateRgn函数可以产生WM_PAINT
在某些情况下,显示区域的一部分被临时覆盖,windows试图保存一个显示区域,并在以后恢复它,但这不一定能成功,windows可能发送WM_PAINT情况:
- windows擦除覆盖了部分窗口的对话框或消息框
- 菜单下拉出来,然后被释放
- 显示工具提示消息
在某些情况下,windows总是保存它所覆盖的显示区域,然后恢复它,因此不会发送WM_PAINT,windows不会发送WM_PAINT情况:
- 鼠标光标穿越显示区域
- 图标拖过显示区域
注:显示区域是整个应用程序窗口中未被标题列、窗口边框,以及可选的菜单项、工具列、状态栏和滚动条占据的部分
无效区域
- 窗口消息处理程序接收到WM_PAINT后,准备更新整个显示区域,但经常只需更新一个较小区域(最常见的是显示区域中的矩形区域),为了渲染性能,只绘制需重新绘制那部分,而不必重新绘制整个显示区域
- 需重新绘制那部分区域称为无效区域或更新区域,显示区域内无效区域的存在,才会让windows将一个WM_PAINT放在消息队列中,只有在显示区域的某一部分失效时,窗口才会接受WM_PAINT
- windows内部为每个窗口保存一个绘图信息结构,这个结构包含了包围无效区域的最小矩形坐标及其它信息,这个矩形叫做无效矩形,也称无效区域,如果在窗口消息处理程序处理WM_PAINT之前显示区域中另一个区域变为无效,windows计算出一个包围两个区域的新的无效区域(新的无效矩形),并更新绘图信息结构,windows不会将多个WM_PAINT都放在消息队列中,而是进行合并处理,也是为了渲染性能,即任何时刻,消息队列中每个窗口至多一个WM_PAINT消息
- InvalidateRect可使显示区域内矩形无效,如果消息队列中已包含WM_PAINT,windows计算新的无效矩形,更新绘图信息结构,否则将一个新的WM_PAINT放入消息队列,GetUpdateRect可取得窗口无效矩形坐标
- 调用BeginPaint之后,整个显示区域变有效(不再有无效区域存在),ValidateRect可使显示区域内的任何矩形区域变有效,如果当前不再有无效区域存在,当前消息队列中对应窗口WM_PAINT被删除(如果有)
阅读全文
0 0
- windows——消息——WM_PAINT
- vc初步之——— WM_Paint 消息详解
- 达内学习笔记——WM_PAINT消息
- Windows编程入门-WM_PAINT消息
- Win32 SDK基础(12)—— WM_PAINT消息的处理
- Win32学习笔记——WM_PAINT
- windows程序设计(2):WM_PAINT消息详解
- windows——消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- WM_PAINT消息
- Github收藏之AndroidUtilCode
- CBoard框架使用总结二--扩展新的功能模块
- HDU-1010 tempter of the bone 骨头的诱惑/233
- 第三本书 pxe
- codecomb 2098 stone 线段树 解题报告
- windows——消息——WM_PAINT
- 多媒体(音频)
- python3 [爬虫入门实战]scrapy爬取盘多多五百万数据并存mongoDB
- Spring MVC参数的传递与接收
- 前端在线编程题6
- 深入研究Struts2(二)-StrutsPrepareAndExecuteFilter源码剖析
- hdu2028 Lowest Common Multiple Plus
- PCL( I currently use CDT with cmake to build a Point Cloud Library (PCL) project.)
- HUAWEI在线编程题库180题