您的位置:首页 > 其它

MFC绘图闪烁问题

2015-12-01 10:19 344 查看
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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: