如何解决mfc子窗口移动时对主窗口的不断刷新
由来:我做了一个单文档用于画图,然后新建了一个线程进行画图操作,同时弹出一个调节绘画速度的对话框。问题:当我移动对话框时,主窗口之前画的东西全被刷掉了,此现象在部分win...
由来:我做了一个单文档用于画图,然后新建了一个线程进行画图操作,同时弹出一个调节绘画速度的对话框。
问题:当我移动对话框时,主窗口之前画的东西全被刷掉了,此现象在部分win7系统中不存在,在xp和一些win7系统中会很明显的出现;
解决历程:尝试了设置变量,在弹出对话框前后修改该变量的值,以实现对ondraw()控制,结果在移动对话框时会出现擦出背景的现象!
问题就是这样,希望各位大神能给于一定的帮助,谢谢…… 展开
问题:当我移动对话框时,主窗口之前画的东西全被刷掉了,此现象在部分win7系统中不存在,在xp和一些win7系统中会很明显的出现;
解决历程:尝试了设置变量,在弹出对话框前后修改该变量的值,以实现对ondraw()控制,结果在移动对话框时会出现擦出背景的现象!
问题就是这样,希望各位大神能给于一定的帮助,谢谢…… 展开
3个回答
展开全部
用“双缓冲 内存DC”应该可以解决这个问题。
你不止是移动窗口吧,最小化之后最大化也应该会出现这个问题。
在初始化的时候将内存DC创建好,线程只是对内存DC进行绘制,同时,在绘制速度调节的时候还应该控制内存DC对设备DC的刷新。
百度上面双引号内容,介绍和代码比较丰富,就不复制了。
你不止是移动窗口吧,最小化之后最大化也应该会出现这个问题。
在初始化的时候将内存DC创建好,线程只是对内存DC进行绘制,同时,在绘制速度调节的时候还应该控制内存DC对设备DC的刷新。
百度上面双引号内容,介绍和代码比较丰富,就不复制了。
追问
"双缓冲 内存DC" 貌似是个好东西,需要好好研究下,不过网上很多好像是加载图片的,我这是在线程中绘图,动态绘制的那种!只是不知道,在主窗口(单文档)绘图的同时弹出一个用于控制绘图速度的对话框后,当移动对话框时为什么在某些系统例如xp中,主窗口(单文档)刷的很厉害,并且会将之前画的东西全给刷掉了。
如果这个问题解决不了我就只能,将弹出的对话框固定了,不让他移动……
追答
不移动也不行啊!你最小化或者切换窗口之后,依然会全部刷掉!
线程动态绘图,想做的很完善确实比较困难,使用双缓冲,也是属于双缓冲的高级应用。
这里你需要注意,在单文档程序中,不再OnDraw里面的绘制,会在触发界面更新后被“清除“掉,其实就是刷新界面需要重绘,而你原来绘制的代码不支持”重绘“
因此,你需要做的,就是:
线程更新内存DC
OnDraw中BitBlt内存DC到pDC
定时触发变更区域重绘InvalidateRect(重绘区域)
另外,如果你线程更新是”平滑“更新,而且不需要大量绘制,那么。。。双缓冲还真不适合,只要实现保存已绘制数据并在Ondraw里面重绘就可以了。
展开全部
子窗口的画图要放在onpaint中,如果你是放在ondraw中时,因为拖动对话框会产生wm_paint消息进行重绘,而onpaint函数没有相应的处理代码,故重绘后原来的就会消失
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
使用双缓冲技术,以前遇到过相似问题,用双缓冲解决。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询