MFC中的窗口绘图问题
1.闪屏
如果按照常规的绘图过程,即每做完一个绘图操作,就马上进行窗口刷新,当绘图过程比较密集的时候,由于没绘制一次就刷新一次窗口,而刷新窗口是需要一定延时的,这就导致了在上一次的刷新还没有完成的时候,这一次的绘图又到来了,这就是常见的闪屏现象(screen flicker)
2.双缓冲
要避免闪屏的问题,只需要对每次绘图都进行窗口刷新,而是对所有的绘图完成之后再进行一次刷新,这既提高了效率,有避免了闪屏的问题。
绘图的实质是将绘制的图形数据写入到一个内存块,然后计算机将这个内存块送到图像显示设备进行显示。默认的绘图过程也是如此,只不过它是每将一次的绘图数据写入到内存,就直接将这块内存发送到显示设备。而现在我们要做的是,将一个周期的内的绘图数据全部写入到同一个内存块中,这个周期完成之后,再将其送到显示设备。
代码的大致流程如下:
CBitmap memBmp;
CDC memDC;
memDC.CreateCompatibleDC(NULL);
CDC *pDC=this->GetDC();
CRect rect;
m_chartBoard.GetWindowRect(rect);
this->ScreenToClient(rect);
memBmp.CreateCompatibleBitmap(pDC,rect.Width