函式說明
該函式向指定的窗體更新區域添加一個矩形,然後視窗客戶區域的這一部分將被重新繪製。
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 InvalidateRect Lib "user32" Alias " InvalidateRect" (ByVal hwnd As Long, lpRect As RECT, ByVal bErase As Long) As Long
易語言聲明
.版本 2
.DLL命令 InvalidateRect, 邏輯型, "user32", "InvalidateRect"
.參數 hWnd, 整數型
.參數 lpRect, rect, 傳址
.參數 bErase, 邏輯型