图形显示控件常见的问题是界面用户刷新时的闪烁问题,为了消除闪烁,采用位图双缓冲显示技术。具体实现是:将显示内容绘制在一个内存位图对象上,用CDC::Bitblt()函数将位图直接输出,由于Bitblt在Windows系统中函数优先级较高,故可实现极快速的显示,消除闪烁。为操作方便,将双缓冲操作封装成一个CMemDC类负责内存位图的创建和显示输出。
CDC MemDC 定义一个显示设备对象
CBitmap MemBitmap 定义一个位图对象
MemDC.CreateCompatibleDC()创建一个指定设备兼容的内存设备上下文环境(DC)
这时不能画图,因为没有地方画。
MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight)创建与指定的设备环境相关的设备兼容的位图。
CBitmap *pOldBit=MemDC.SelectObject(&MemBitmap)
将位图选入到内存显示设备中
只有选入了位图的内存显示设备才有地方画图,画到指定的位图上。
先用背景色将位图清除干净
MemDC.FillSolidRect(0,0,nWidth,nHeight,RGB(255,255,255))
绘图
MemDC.MoveTo()
MemDC.LineTo()
将内存上的图拷贝到屏幕上并显示
pDC->Bitblt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY)
绘图完成后的清理
MemBitmap.DeleteObject()
MemDC.DeleteDC()