在我们的开发过程中,无可避免的使用到双缓冲技术,为我们解决基本的闪烁问题,但当我们加载多张图片时,由于有先后关系,存在一些‘卡’或者还是有闪烁的存在...由此,一个基本的解决方法如下:
HBITMAP hBitMap1, hBitMap2; //为我们要载入的2张图片的句柄
void OnDraw(HDC hdc)
{
HDC memDC = CreateCompatibleDC(hdc); // 创建兼容性dc,用于存储我们下一次要显示的总的画面,即包括几张图片的叠加
HBITMAP hhBitMap = CreateCompatibleBitmap(hdc, bitMap.bmWidth, bitMap.bmHeight); // 创建兼容性位图,用于给memDC存 // 储信息
SelectObject(memDC, hhBitMap); // 关联资源
HDC memMemDC = CreateCompatibleDC(memDC); // 用作memDC的缓冲dc
HGDIOBJ handle = SelectObject(memMemDC,hbitMap1);
BitBlt(memDC, 0, 0, 100, 100, memMemDC, 0, 0, SRCCOPY); // 将第一张图片copy过去
SelectObject(memMemDC, hBitMap2);
TransparentBlt(memDC, nX, nY, 50, 50,
memMemDC, 0, 0, 50, 50,
RGB(255, 255, 255)); // 将第二张图片粘过去
BitBlt(hdc, 0, 0, bitMap.bmWidth, bitMap.bmHeight, memDC, 0, 0, SRCCOPY); // 将我们拥有两张图片的memDC粘到屏幕
SelectObject(memMemDC,handle);
DeleteObject(memMemDC);
DeleteObject(memDC);
}
由此,可以解决顺序粘到hdc产生的时间差带来的影响...