MFC绘图闪烁问题

1、显示图像闪烁的问题

当窗口连续显示多帧图像或者窗口拉动时,窗口需要重绘,这时候,MFC总是先用背景色将显示区清楚,之后调用OnPaint,而背景色往往与绘图内容反差很大,这样在短时间内背景色与显示图像交替出现,使得显示窗口看起来在闪烁。

如果将背景刷设置为NULL,这样无论如何重绘图像都不会闪烁,但是使得窗口的显示非常混乱,因为重绘时没有背景色对原来绘制的图像清除,而又叠加了新的图像。

2、如何避免闪烁

1)建立在GDI绘图的情况

双缓冲技术,它的原理就是建立一个内存DC,这个DC和窗口DC一样,不同的是它的内容并不直接显示在屏幕路之上,但是使用起来的方法是和窗口DC是一样的,我们首先将要绘制的内容绘制到这个内存DC中之后,再由这个内存DC一次性将内容绘制到窗口DC之上,这样可以有效的解决绘图的时候带来的闪烁问题。

非常详细的内容参见我转载的博客:

CDC双缓冲绘图


2)利用openg绘图的情况

利用双缓存在解决这个问题,一个前台缓存,一个后天缓存。绘图先在后台缓存中画,画完后,交换到前台缓存,这样就不会有闪烁现象。

A:首先将像素格式定义成支持双缓存的,参见SetPixelFormat函数点击打开链接

B: 绘制完成后加入这样一行代码SwapBuffers(hDC),到此OpenGL绘图已经没有闪烁了,但MFC还会反复的重绘背景产生闪烁

C:处理消息循环OnEraseBkgnd,使其不要重绘背景,直接返回TRUE


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值