在MFC中重绘时闪烁

Ant*_*ton 1 c++ mfc

我正在使用C++和MFC编写一个俄罗斯方块游戏.我有一个计时器和OnTimer处理程序.Handler看起来像这样:

... do some game-only logic ...
this->RedrawWindow();
Run Code Online (Sandbox Code Playgroud)

在OnPaint处理程序中,我绘制块,映射(带位图背景),得分等.对于绘图我使用位图和BitBlt函数.一切都是从头开始绘制的,我重绘了整个窗口区域.总体性能是正常的,有时闪烁,但没关系,但是当我将位图背景添加到地图时,闪烁同时重绘变得难以忍受.我是否必须使用其他算法来绘制位图,或者每次触发OnPaint时都可能错误地进行所有重绘?

我怎样才能消除闪烁?我只能使用C++和MFC,不幸的是后者在开始这个项目之前根本不知道.

那么,再说一次:如何消除闪烁并提高重绘的性能?

sje*_*397 6

尝试重写CWnd :: OnEraseBkgnd以返回非零值.这告诉窗口你已经处理过自己擦除窗口背景.


Fai*_*roz 6

尝试双缓冲."双缓冲"是指写入存储器DC然后将存储器DC BitBlt到屏幕的技术.

与Windows相关,此技术可用于处理WM_PAINT消息.OnDraw函数调用BitBlt将内存DC复制到屏幕DC中.内存DC与视图类中的成员变量相关联,并在没有其他消息被处理的时间内写入.

这是一些可以提供帮助的代码的链接.