VC++ 关于窗口刷新的几个函数InvalidateRect、UpdateWindow、RedrawWindow

在前面写了那么多自绘控件,有必要对这几个接口做下声明解释:

这几个接口都是对执行窗体重绘的消息,那么什么时候才会发生重绘窗口的消息?答案是:当窗体需要更新内容或是重绘外观背景的时候,应用程序通常会发送一条WM_PAINT消息,通知窗体进行重新绘制。

InvalidateRect(m_hWnd, lpRect, bErase):

强制系统进行重绘,但是不一定马上会进行重绘,仅仅是通过Post方式将WM_PAINT消息放入到窗体消息队列,当执行到WM_PAINT消息时候才会执行重绘。重绘区域通过lpRect指定,如果为NULL,则重绘整个客户区。

UpdateWindow(m_hWnd)

绕过消息队列直接向窗体发送WM_PAINT消息并且立即执行,发送之前会通过GetUpdateRect(hWnd, NULL, TRUE)看看是否有需要绘制的客户区域,如果没有,就不发送WM_PAINT消息了。

RedrawWindow(HWND hWnd, LPCRECT lpRectUpdate, CRgn* prgnUpdate,  UINT flags):

具有InvalidateRect和UpdateWindow的双特性。声明窗口状态为无效,并立即更新窗口,立即调用WM_PAINT消息。

通常我们会看到这样的组合:

InvalidateRect(m_hWnd, lpRect, bErase);

UpdateWindow(m_hWnd);

目的是让窗体立即刷新无效区域。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值