绘图ondraw重新绘制

本文详细介绍了MFC中刷新界面和重绘图形的方法,包括Invalidate()、UpdateWindow()和RedrawWindow()的使用。Invalidate()标记窗口需要重绘但不立即执行,UpdateWindow()则强制立即重绘,RedrawWindow()结合两者功能。同时,通过控制OnDraw中函数的开关也能实现图形的刷新。
摘要由CSDN通过智能技术生成

OnDraw的重新绘制

相信有不少小伙伴在绘制图形过程中遇到过想刷新界面或者想重绘图形吧。我最近在做一个关于绘图的程序也遇到了这个问题。当然网上也有不少解决办法的问题,但是我感觉不太全面。下面我较为全面的分享一下我的解决办法。

1.Invalidate()

网上有些解决方法就是加一个Invalidate()或者Invalidate( BOOL bErase = TRUE ); 就好了,但是大多数是没用的,首先我们要知道Invalidate()是强制系统进行重画,但是不是马上进行重画。他的作用是先使整个窗口客户区无效。窗口的客户区无效意味着需要重绘,例如,如果一个被其它窗口遮住的窗口变成了前台窗口,那么原来被遮住的部分就是无效的,需要重绘。因为Invalidate()只是通知系统,此 时的窗口已经变为无效。这时Windows会在应用程序的消息队列中放置WM_PAINT消息。MFC为窗口类提供了WM_PAINT的消息处理函数OnPaint,OnPaint负责重绘窗口。视图类有一些例外,在视图类的OnPaint函数中调用了OnDraw函数,实际的重绘工作由OnDraw来完成。参数bErase为TRUE时,重绘区域内的背景将被擦除,否则,背景将保持不变。当执行到WM_PAINT消息时才会对窗口进行重绘。

2.UpdateWindow()

先判断GetUpdateRect(hWnd,NULL,TRUE)看有无可绘制的客户区域,如果有,发送WM_PAINT消息。如果没有,则不发送WM_PAINT。它使窗口立即重绘。调用Invalidate函数后窗口不会立即重绘,由于WM_PAINT消息的优先级很低,它需要等消息队列中的其它消息发送完后才能被处理。调用U

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值