如何解决mfc子窗口移动时对主窗口的不断刷新

由来:我做了一个单文档用于画图,然后新建了一个线程进行画图操作,同时弹出一个调节绘画速度的对话框。问题:当我移动对话框时,主窗口之前画的东西全被刷掉了,此现象在部分win... 由来:我做了一个单文档用于画图,然后新建了一个线程进行画图操作,同时弹出一个调节绘画速度的对话框。
问题:当我移动对话框时,主窗口之前画的东西全被刷掉了,此现象在部分win7系统中不存在,在xp和一些win7系统中会很明显的出现;
解决历程:尝试了设置变量,在弹出对话框前后修改该变量的值,以实现对ondraw()控制,结果在移动对话框时会出现擦出背景的现象!
问题就是这样,希望各位大神能给于一定的帮助,谢谢……
展开
 我来答
bhtzu
2013-09-26 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4144万
展开全部
用“双缓冲 内存DC”应该可以解决这个问题。
你不止是移动窗口吧,最小化之后最大化也应该会出现这个问题。
在初始化的时候将内存DC创建好,线程只是对内存DC进行绘制,同时,在绘制速度调节的时候还应该控制内存DC对设备DC的刷新。

百度上面双引号内容,介绍和代码比较丰富,就不复制了。
追问
"双缓冲 内存DC" 貌似是个好东西,需要好好研究下,不过网上很多好像是加载图片的,我这是在线程中绘图,动态绘制的那种!只是不知道,在主窗口(单文档)绘图的同时弹出一个用于控制绘图速度的对话框后,当移动对话框时为什么在某些系统例如xp中,主窗口(单文档)刷的很厉害,并且会将之前画的东西全给刷掉了。
如果这个问题解决不了我就只能,将弹出的对话框固定了,不让他移动……
追答

不移动也不行啊!你最小化或者切换窗口之后,依然会全部刷掉!

线程动态绘图,想做的很完善确实比较困难,使用双缓冲,也是属于双缓冲的高级应用。


这里你需要注意,在单文档程序中,不再OnDraw里面的绘制,会在触发界面更新后被“清除“掉,其实就是刷新界面需要重绘,而你原来绘制的代码不支持”重绘“

因此,你需要做的,就是:

  1. 线程更新内存DC

  2. OnDraw中BitBlt内存DC到pDC

  3. 定时触发变更区域重绘InvalidateRect(重绘区域)


另外,如果你线程更新是”平滑“更新,而且不需要大量绘制,那么。。。双缓冲还真不适合,只要实现保存已绘制数据并在Ondraw里面重绘就可以了。

捷煜白之
2019-02-06 · TA获得超过1111个赞
知道小有建树答主
回答量:509
采纳率:57%
帮助的人:8.9万
展开全部
子窗口的画图要放在onpaint中,如果你是放在ondraw中时,因为拖动对话框会产生wm_paint消息进行重绘,而onpaint函数没有相应的处理代码,故重绘后原来的就会消失
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
huang71216
2013-09-27 · 超过37用户采纳过TA的回答
知道小有建树答主
回答量:171
采纳率:0%
帮助的人:83.9万
展开全部
使用双缓冲技术,以前遇到过相似问题,用双缓冲解决。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(1)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式