问题描述
- MFC 基于对话框的画图问题 OnPaint()函数不解
-
我在对话框中插入了一个tab control,用来画两个曲线图,其中一个是直接在界面上画的,用Moveto和Lineto函数,但是为什么我在切换tab控件的时候,那个曲线之前画的图像都没有了,从我切换过去之后重新开始画了呢?麻烦大家啦~
解决方案
Tab切换会重新刷新,绘图内容会清除。
你要保留旧图就应该用绘图缓冲区,先在缓冲区中绘图,输出到界面。
Tab切换时就不用从头绘图,直接把缓冲区输出到界面。
解决方案二:
切换函数可能触发了onpaint函数,把窗口重新刷新了,以前画的就给刷掉了,把绘图重新放在onpaint每次刷新就重画,这样以前的就会显示了。 view类的ondraw函数是这样,所以可能是这个原因。
解决方案三:
切换tab的时候,OnPaint也跟着换了,之前的绘图就没有了吧。
你所有的绘图都放到每个tab页面的OnPaint中
解决方案四:
因为你把图绘制到control的设备场景中,但是设备场景失效后在必要时会被系统刷新,系统通过DefWindowProc处理WM_PAINT重画control,也就是mfc里的OnPaint,所以你应该在这个里面画,同时不让系统再画了,这样control每次重画都会画上你的图,这样你的图就“一直存在了”
解决方案五:
MFC中的Invalidate、OnDraw、OnPaint函数的作用、区别和联系
时间: 2024-12-04 22:24:19