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后,准备更新整个显示区域,但经常只需更新一个较小区域(最常见的是显示区域中的矩形区域),为了渲染性能,只绘制需重新绘制那部分ÿ