C++的双缓冲机制

当我们直接在设备上作图时,程序自动反复将作好的图像复制到显示设备上显示,如果背景色与前景色差异很大,实际情况看起来就是界面的频繁闪动。双缓冲机制就是创建一个设备的内存副本,我们在内存上作图,完成后再整体Copy到实际设备上,如此整体的复制粘贴,就可以避免闪烁了。
下面是内存设备的创建

CDC memCdc;//内存设备
CBitmap memBmp;//用于存储所作图的完整图像,注意后面的SelectObject
memCdc.CreateCompatibleDC(&dc);//dc为实际设备
memBmp.CreateCompatibleBitmap(&dc, screenWidth, screenHeight);
memCdc.SelectObject(&memBmp);

之后就可以在memCdc上作图。然后再用下面的代码将完整的图像复制到实际设备dc上。

dc.BitBlt(0, 0, screenWidth, screenHeight, &memCdc, 0, 0, SRCCOPY);
memCdc.DeleteDC();
memBmp.DeleteObject();


当我们要求自己绘制图像后面的背景,同时能少量更改背景上的内容时,可以用内存图片存储我们所作的背景,不再释放该bmp图片(即上面的memBmp,这要求memBmp不再是局部变量),每次重绘背景上的内容时,直接将bmp图片BitBlt复制过去就可以了。当然,在这里依然要注意最后对bmp的释放(或者我们要更新背景时,需要重新释放后再CreateCompatibleBitmap分配)。

if(Cbmp.GetSafeHandle() != NULL)
Cbmp.DeleteObject();

所以双缓冲的内存作图,不仅可以解决闪烁的问题,还能减少静态背景的重绘次数,避免界面的刷新延迟。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值