关于win32下双缓冲的一点心得

在我们的开发过程中,无可避免的使用到双缓冲技术,为我们解决基本的闪烁问题,但当我们加载多张图片时,由于有先后关系,存在一些‘卡’或者还是有闪烁的存在...由此,一个基本的解决方法如下:

 

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产生的时间差带来的影响...

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值