网上关于CImage的资料真是少……因为项目的原因,需要用到CImage类,但是图像刷新很频繁,导致闪屏很严重,有查不着相关的资料,真是纠结了很久。不过最后还是解决了^_^ ^_^ ^_^
不管利用的是什么类,什么工具,双缓存的思想是一致的:首先创建一个内存DC,记为MemDC;接着将我们的所有的绘图操作都画到MemDC中;最后利用BitBlt或者StretchBlt将MemDC中的内容一次性的拷贝绘制到目标DC上,即我们看到的客户端上。多说无益,上代码:
CWnd *pWnd = GetDlgItem(IDC_IMG_SHOW);
CClientDC dc(pWnd);
CRect rectBig;
pWnd->GetClientRect(rectBig);
CBitmap bitmap;//一定要有画布,没有画布玩不转的
CDC MemDC;
bitmap.CreateCompatibleBitmap(&dc, rectBig.Width(), rectBig.Height());
MemDC.CreateCompatibleDC(&dc);
MemDC.SelectObject(&bitmap);//选择画布
MemDC.SetStretchBltMode(HALFTONE);//设置拉伸模式
MemDC.FillSolidRect(rectBig, RGB(0, 0, 0));//背景色
m_imgData.Draw(MemDC.m_hDC, rect);//m_imgData是CImage对象,rect表示绘图的位置
dc.StretchBlt(rectBig.left, rectBig.top, rectBig.Width(), rectBig.Height(), &MemDC, rectBig.left, rectBig.top, rectBig.Width(), rectBig.Height(), SRCCOPY);
就是这样啦,其实很简单。