MFC双缓存画图

在MFC应用程序中,使用Invalidate()函数频繁重画客户区会导致闪烁,影响用户体验。本文介绍了三种防止闪烁的方法:局部重画、异或画图和重点讲解的双缓存画图。双缓存技术通过在内存中预先绘制图像,然后一次性拷贝到屏幕,避免了连续重绘导致的闪烁问题。具体实现涉及OnEraseBkgnd()函数,使用兼容DC和位图进行内存绘图,最后使用BitBlt()函数将内存中的图像复制到屏幕。
摘要由CSDN通过智能技术生成

MFC双缓存画图在使用MFC画图时,使用Invalidate()函数重画客户区,尤其是使用频繁的时候,我们可以感觉到整个客户区在不停地闪烁, 导致我们的界面的效果特别差,那么怎样能防止这一现象发生呢?我们可以有以下几种方法: * 局部重画:就是说,客户区画图时,我们把刚刚的有过改动的区域确定,然后只改变这一小区域,而不是把整个客户区重画。不过这样 做还是不能彻底解决闪烁的现象。因为重画的局部还是会闪烁。 * 异或画图:学计算机的人都知道,异或逻辑是相同为0,相异1。异或画图就是利用这一特性,在原来的图形的基础上重新再画一次,与前 一次的处处都相同,这种方法相当于擦除了原来的图形,然后再画自己想要的图形。我个人觉得这个技术在画类似橡皮筋等东西时很有用。 * 双缓存画图:下面我们重点讲解这种技术。MFC画图的闪烁原因不在于在屏幕上把图像画出来,而在于怎么去画。也就是说,如果原来有这么一张已经画好的图,而要计算机把这张图片画出来, 这就不会有闪烁现象发生了。双缓存技术利用的就是这个原理。双缓存主要就是在内存中间重新开辟一个空间,在内存中先把要画的图该怎么画先画出来,而屏幕上的东西暂时不去动它,待图像在内存中 画好之后,把画好的图像直接拷贝到屏幕上去,这样就几乎不需要时间去计算,也就不会有闪烁的现象发生。具体框架代码如下:BOOL CDataStructureView::OnEraseBkgnd(CDC* pDC)

{

           CRect rc;CDC dcMem;

           GetClientRect(&rc);

           CBitmap bmp; //内存中承载临时图象的位图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值