InvalidateRect

更新时间:2024-03-31 11:29

InvalidateRect是一个函数,该函数向指定的窗体更新区域添加一个矩形,然后窗体跟新区域的这一部分将被重新绘制。

函数说明

该函数向指定的窗体更新区域添加一个矩形,然后窗口客户区域的这一部分将被重新绘制。

BOOL InvalidateRect(HWND hWnd, // handle of window with changed update region

CONST RECT *lpRect, // address of rectangle coordinates

BOOL bErase // erase-background flag);

参数:

hWnd:要更新的客户区所在的窗体的句柄。如果为NULL,则系统将在函数返回前重新绘制所有的窗口, 然后发送 WM_ERASEBKGND 和 WM_PAINT 给窗口过程处理函数。

lpRect:无效区域的矩形代表,它是一个结构体指针,存放着矩形的大小。如果为NULL,全部的窗口客户区域将被增加到更新区域中。

bErase:指出无效矩形被标记为有效后,是否重画该区域,重画时用预先定义好的画刷。当指定TRUE时需要重画。

返回值:

函数成功则返回非零值,否则返回零值。

说明:被标记为无效矩形的区域直到WM_PAINT消息被处理完之后才会消失,或者使用ValidateRect(),ValidateRgn()函数来使之有效。当应用程序的消息队列中为空时,并且窗体要更新的区域非空时,系统会发送一个WM_PAINT消息到窗体。

这两个都用于声明客户区无效,当下一个WM_PAINT消息到来时发生重画。

其中InvalidateRect(hwnd, NULL, true);重画时将擦除背景。

InvalidateRect(hwnd, NULL, false);重画时不擦除背景

需要:

Windows NT/2000/XP/Vista: 包含Windows NT 3.1以及之后版本。

Windows 95/98/Me: 包含Windows 95 以及之后版本。

Header: 声明在 Winuser.h中; 包含在Windows.h中。

Library: Use User32.lib.

其他说明:InvalidateRect是将窗口中的一块矩形区域标注为“无效”,系统会不断向窗口发送WM_PAINT消息令其重绘。在响应WM_PAINT消息时,需要调用BeginPaint获取DC来进行重绘。该函数会合并所有“无效”区域,对DC进行裁剪,将整个窗口标注为“有效”,清除WM_PAINT消息。DC经裁剪之后,在进行绘制时,超出DC范围的操作将不被处理,所以即使在响应WM_PAINT消息时绘制的是整个窗口,而实际上绘制的也只是“无效”区域。恰当地使用InvalidateRect进行刷新比刷新整个窗口的效率要高。在WM_PAINT消息时,应尽量根据PAINTSTRUCT结构中rcPaint指定的矩形来处理重绘,减少执行不必要的代码,从而提高效率。

调用InvalidateRect后不需要手动发送WM_PAINT消息。

VB声明

Declare Function InvalidateRectInvalidateRect

易语言声明

.版本 2

.参数 hWnd, 整数型

.参数 lpRect, rect, 传址

.参数 bErase, 逻辑型

免责声明
隐私政策
用户协议
目录 22
0{{catalogNumber[index]}}. {{item.title}}
{{item.title}}