wxWidgets避免闪烁, 绘制卡的原因

MFC里面是CMemDC,能让每一步画的结果都绘制在一个memory dc中。实际上也就是在RAM中跟windows的DC尺寸一样的一块内存,数据绘画的结果如果启用该DC,就会绘到该memory中。


对于闪烁,深层次的原因是在没有启用memory的时候,绘制的每一步的结果(画线的过程中,可能会逐步影响到绘制表面的一个一个像素;绘制图像更是;)都直接作用到了显示器会来抓取画面的内存中,所以这边在画,那边在抓数据用来显示。如果画的过程不够快,就容易让人看到画的过程,就形成我们的闪烁(flickering)。


使用上memory dc,或者是double buffer后,当前绘画代码的结果的作用内存,跟显示器显示的内存完全就分割开来。可以利用整块内存拷贝的方法快速的交换显示区域和绘制区域,从而消除flickering。


在wxWidgets中, 可以用wxBufferedPaintDC来启动类似CMemDC或者是Double buffer的机制。用这个类,需要包含头文件"wx/dcbuffer.h"。


另外,我们很有可能在绘制的过程中,接收鼠标移动消息并绘制物品,如果发现绘制滞后,尝试调用Update()。立即更新画面试试。





你可能感兴趣的:(wxWidgets避免闪烁, 绘制卡的原因)