双缓存:就是在内存中准备一块区域,把要显示的图形都加载到内存中,然后调用BitBlt函数,一次性把内存设备复制到显示设备上,这样就可以防止闪屏了。
和加载并显示一幅普通的位图的步骤是差不多的:
CDC *pDC = GetDC();
//背景,前景,内存位图
CBitmap bmpBack,bmpFront,bmpMem;
//背景设备,前景设备,内存设备
CDC dcBack,dcFront,dcMem;
//创建与显示设备兼容的位图
bmpMem.CreateCompatibleBitmap(pDC, 1024, 768);
//加载位图
bmpBack.LoadBitmap(IDB_BITMAP_BACK);
bmpFront.LoadBitmap(IDB_BITMAP_FRONT);
//创建与显示设备兼容的设备
dcMem.CreateCompatibleDC(pDC);
dcBack.CreateCompatibleDC(pDC);
dcFront.CreateCompatibleDC(pDC);
//将位图选入设备
dcMem.SelectObject(&bmpMem);
dcBack.SelectObject(&bmpBack);
dcFront.SelectObject(&bmpFront);
//先在内存上的位图绘制背景和前景
dcMem.BitBlt(0, 0, 1024, 768, &dcBack, 0, 0, SRCCOPY);
dcMem.BitBlt(0, 0, 1024, 768, &dcFront, 0, 0, SRCCOPY);
//最后一次性的向显示设备显示位图,不会出现闪屏
pDC->BitBlt(0, 0, 1024, 768, &dcMem, 0, 0, SRCCOPY);
//释放资源
pDC->DeleteDC();
BackDC.DeleteDC();
FrontDC.DeleteDC();
MemDC.DeleteDC();
VC无闪烁刷屏技术的实现(双缓存)
http://blog.chinaunix.net/u2/82382/showart_1410654.html
VC使用双缓存技术,解决闪屏问题
http://blog.csdn.net/lizhigang34/archive/2008/05/28/2491594.aspx#