册发哥 册发哥
关注数: 33 粉丝数: 34 发帖数: 429 关注贴吧数: 13
请教各位吧友一个问题,关于MFC对话框子控件闪烁的,纠结一天了 有一个对话框A,对话框上有一个子控件B。 对话框A不需要显示什么东西,所以只要刷刷背景就好了。 子控件B要显示的内容比较复杂,而且跟对话框背景差异比较大。 于是每次缩放对话框时窗口闪动的就很厉害。 我自己研究了一下,发现就是WM_PAINT消息发生后,程序会先调用对话框A的OnPaint函数,把背景刷掉(包括子控件B),然后再调用子控件B的OnPaint函数画一些复杂的东西(耗时相对较长),这样一来就发生闪烁了。 解决方法我也想到过,但是都不太完美。 其中一个就是:对话框A的OnPaint函数什么都不做OnErasebkgnd函数返回true。这样一来子控件B就不会被背景刷掉,闪烁问题是解决了。另一个问题出现了,对话框A除了子控件B之外的其它位置也跟着不会刷新了,被别的程序窗口覆盖过就会显示其他窗口的东西。 另一个解决方法就是双缓冲,我在其它场合用过挺多次的,效果不错。大概就是准备一个内存DC,刷好背景颜色,再把子控件B的内容也画到内存DC中,最后把内存DC给BitBlt一下就好了。但这里很难应用,因为对话框A和子控件B的OnPaint函数都是分开由系统调用的,而且是先对话框A再子控件B,这样即使在A的OnPaint函数中获得了B的DC也没有什么意义。 语文是数学老师教的,表达不是很清楚,不好意思啊。 麻烦各位给点思路哈,能帮忙给出个解决方案就更谢谢了。
1 下一页