java invalidate_InvalidateRect | 学步园

InvalidateRect添加一个区域到指定窗口的更新区域。更新区域代表必须被重绘的窗口客户区域的一部分。

BOOL InvalidateRect(

HWND hWnd,           // 窗口的HANDLE

CONST RECT* lpRect,  // 矩形饿坐标

BOOL bErase          // 擦除状态

);

参数:

hWnd:[输入]一个更新区域已经改变的窗口HANDLE。如果这个参数是NULL,系统将是所有的窗口无效和重绘,并在函数返回之前发送WM_ERASEBKGND和WM_NCPAINT消息到窗口的处理程序。

lpRect:[输入]指向一个RECT结构,该结构包含了被添加到更新区域的客户坐标,如果这个参数是NULL,整个客户区域将被添加到更新区域。

bErase::[输入]说明当更新区域被处理的时候更新区域内的背景是否要擦除。如果这个参数是TRUE,当BeginPaint函数被调用的时候背景将被擦除,如果参数是FALSE,背景不会改变。

返回值:

如果函数成功,返回值非0

如果函数失败,返回值是0

Windows NT/2000/XP: 使用GetLastError得到错误的详细解释。

备注:

无效的区域被累积,直到下个WM_PAINT消息被处理或着通过ValidateRect或ValidateRgn来使区域变有效。

系统发送一个WM_PAINT消息给到一个窗口,无论窗口的更新区域是不是空的,有没有其他的消息在窗口的应用程序队列中。

指定的区域必须已经通过一个区域函数创建了。

如果更新区域中任何部分的bErase参数是TRUE,整个区域的背景都被擦除,而不是指定的那部分。

要求平台:

WINDOWS NT/2000/XP:包括WINNT3.1以后

WIN95/98/ME:包括95以后的版本

头文件:在winuser.h中声明,包含windows.h

库文件: User32.lib

例子代码:

无效客户区系统并不是WM_PAINT消息的唯一来源,InvalidateRect或InvalidateRgn函数可以间接为你的窗口产生WM_PAINT消息,这些函数标记所有的或部分的客户区为无效(必须被重绘)。

在后面的例子中,窗口程序在处理WM_CHAR消息的时候将整个客户区无效。这就允许用户通过输入一个数字来表示并浏览结果,一旦应用程序的消息队列中没有其他消息,这些结果将被画出来。

//点的集合

POINT aptPentagon[6] = {50,2, 98,35, 79,90, 21,90, 2,35, 50,2},

aptHexagon[7]  = {50,2, 93,25, 93,75, 50,98, 7,75, 7,25, 50,2};

POINT *ppt = aptPentagon;

int cpt = 6; //默认顶点书

.

.

.

case WM_CHAR:

switch (wParam)

{

case '5': //用户输入了5

ppt = aptPentagon;

cpt = 6;

break;

case '6': //用户输入了6

ppt = aptHexagon;

cpt = 7;

break;

}

InvalidateRect(hwnd, NULL, TRUE);

return 0L;

case WM_PAINT:

hdc = BeginPaint(hwnd, &ps);

GetClientRect(hwnd, &rc);

SetMapMode(hdc, MM_ANISOTROPIC);

SetWindowExtEx(hdc, 100, 100, NULL);

SetViewportExtEx(hdc, rc.right, rc.bottom, NULL);

Polyline(hdc, ppt, cpt); //画线

EndPaint(hwnd, &ps);

return 0L;

在这个例子中,InvalidateRect的NULL参数表示整个客户区,TRUE参数导致背景被擦除,如果你不想应用程序等待应用程序的消息队列中没有其他消息再更新,你可以调用UpdateWindow函数来强迫立即发送WM_PAINT消息。如果客户区有任何无效的部分UpdateWindow将发送WM_PAINT消息到指定的window程序

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值