Invalidate()、InvalidateRect()、InvalidateRgn、UpdateWindow()

来源:互联网 发布:sql怎么查找重复数据 编辑:程序博客网 时间:2024/05/20 20:03

1、Invalidate()使整个客户区无效,客户区无效则会发送WM_PAINT消息对整个客户区进行重绘。如果消息队列非空则Invalidate()不会立即重绘窗口,直到消息队列为空才向窗口发送WM_PAINT消息重绘窗口。函数原型:

void Invalidate( BOOL bErase = TRUE);
    其参数决定了是否要在WM_PAINT消息前发送WM_ERASEBKGND,bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。

2、InvalidateRect()使客户区的指定矩形区域无效,指定区域无效则会发送WM_PAINT消息对指定的区域进行重绘。函数原型:

BOOL InvalidateRect(        HWND hWnd,        const RECT *lpRect,        BOOL bErase);
<span style="font-weight: 700; color: rgb(51, 51, 51); font-family: arial, 宋体, sans-serif; font-size: 14px; line-height: 24px; text-indent: 28px;">3、InvalidateRgn()</span>函数通过添加一个区域到一个窗口的更新区域中来使指定矩形的客户区域无效;这个无效的区域和所有更新区域中的其他区域将被标记用来在下一个WM_PAINT消息发生的时候描绘
4、UpdateWindow()会通过发送WM_PAINT消息对客户区进行重绘,如果没有可绘制的区域(通过GetUpdateRect判断窗口有无产生无效)则不会发送WM_PAINT消息进行重绘。UpdateWindow()会立即重绘窗口:发送的WM_PAINT消息不会进入消息队列而是直接调用窗口过程进行重绘。函数原型:

BOOL UpdateWindow(HWND hWnd);
5、 RedrawWindow()会对整个或部分客户区进行重绘。RedrawWindow()通过设置flags参数可以使客户区无效、立即重绘窗口等。RedrawWindow()在CWnd中的定义:

BOOL RedrawWindow(   LPCRECT lpRectUpdate = NULL,   CRgn* prgnUpdate = NULL,   UINT flags = RDW_INVALIDATE | RDW_UPDATENOW | RDW_ERASE ); 
       flags参数意义:RDW_INVALIDATE使区域无效,RDW_UPDATENOW为立即重绘窗口,RDW_ERASE为重绘区域内的背景将被擦除

参考文章:http://www.cnblogs.com/it20120227/archive/2011/08/10/2370917.html

0 0
原创粉丝点击