WM_PAINT

WM_PAINT 消息是Windows系统产生的,用于通知应用程序重绘其窗口的消息。通常情况下Windows程序第一次产生WM_PAINT消息是由即将进入消息循环之前的UpdateWindow函数发出的。Windows利用这个机会,绘制窗口程序的窗口。

那么别的WM_PAINT消息是在什么情况下产生的呢?通常有以下几种情况:

1.先前被别的窗口遮住的窗口重现出现了(置顶的那个窗口被移开)

2.用户自己重新调整了窗口的大小

3.滚动条被拖动

4.程序显式调用了InvalidateRect或者InvalidateRgn函数以产生WM_PAINT消息

另外一种情况,当Windows窗口的一部分被遮住,Windows会试图保存这个被遮住的部分,并在它重现时恢复它。但这并不是每次都能成功。Windows有时也会产生一个WM_PAINT消息,当以下情况出现的时候:

1.Windows移开一个覆盖窗体的对话框或消息框

2.菜单被拉下然后又重新释放

3.工具提示信息(tool tip)显示的时候

只在很少的情况下,Windows才会保存显示器的部分区域然后重新恢复。当下面的情况出现时:

1.鼠标在客户区移动

2.图标(icon)在客户去被拖动

 

有效矩形和无效矩形

表面上看,windows窗口程序在接受到一个WM_PAINT消息后,窗口程序应该立即处理这个WM_PAINT消息。但实际情况往往不是这样的。Windows内部保存了一个paint information structure。这个结构体内有一个矩形变量称之为“无效矩形”。它是一个包含无效区域的最小矩形。所以,当Windows窗口程序处理WM_PAINT消息的时候,有不止一个无效矩形存在,那么Windows会将这些无效矩形合成一个包含所有矩形的新的无效矩形,然后通过一个WM_PAINT对所有这些矩形进行处理。也就是说,在任何时候,消息队列中只会存在一个WM_PAINT消息。

posted on 2012-05-02 20:29  NotValid  阅读(2410)  评论(0编辑  收藏  举报

导航