以下先是摘抄,后是自己的学习体会。
发生下面几种事件之一时,窗口消息处理程序会接收到一个WM_PAINT消息:
- 在使用者移动窗口或显示窗口时,窗口中先前被隐藏的区域重新可见。
- 使用者改变窗口的大小(如果窗口类别样式有着CS_HREDRAW和CS_VREDRAW位旗标的设定)。
- 程序使用ScrollWindow或ScrollDC函数滚动显示区域的一部分。
- 程序使用InvalidateRect或InvalidateRgn函数刻意产生WM_PAINT消息。
窗口在接收PAINT消息后只需要重绘一部分,这个部分就是称为「无效区域」或「更新区域」。正是显示区域内无效区域的存在,才会让Windows将一个WM_PAINT消息放在应用程序的消息队列中。只有在显示区域的某一部分失效时,窗口才会接受WM_PAINT消息。如果在窗口消息处理程序处理WM_PAINT消息之前显示区域中的另一个区域变为无效,则Windows计算出一个包围两个区域的新的无效区域即新的无效矩形,并将这种变化后的信息放在绘制信息结构中(原先的绘制信息也就不存在了),window