MFC双缓冲
大家都知道包括windows桌面在内我们看到的一切都是系统画上去的,windows桌面就相当于一个黑板;
《1》普通绘图就是直接在我们看得到的黑板上绘图
《2》双缓冲就是先在一个虚拟的黑板上画完,等用到的时候在把虚拟黑板上的图画复制到我们看得到的黑板上去;
利用双缓冲的优点就是能够使画面流畅,可以想象把画好的图直接粘贴到黑板上一定比在黑板上重新画要快的多。
——————————————————————开始
第一步:新建一个对话框工程
第二步:添加两个按钮:
一个命名为 双缓冲绘图;
一个命名为 普通绘图;
第三步:声明变量:
在CMyDlg类上右击添加变量如下:
CDC MyDC;
CBitmap bmp;
CBitmap *oldbmp;
首先声明一个与窗口DC兼容的内存DC(MyDC)和两个与内存相兼容的位图(bmp,*oldbmp)
第四步:在OnInitDialog()函数中添加以下代码:
//窗口DC
CDC *dc=GetDC();
//创建与窗口DC兼容的内存DC(MyDC)及位图(bmp,*oldbmp )
MyDC.CreateCompatibleDC(dc);
bmp.CreateCompatibleBitmap(dc,200,200);
//把内存位图选进内存DC中用来保存在内存DC中绘制的图形
oldbmp=MyDC.SelectObject(&bmp);
//在内存DC中绘制一些小的圆形,数量要多(体现双缓存的优点)
for(int i=0;i<200;i+=6)
for(int j=0;j<200;j+=6)
MyDC.Ellipse(i-3,j-3,i+3,j+3);
第五步:右击CMyDlg类添加windows消息响应函数WM_CLOSE,添加以下代码:
MyDC.SelectObject(oldbmp);
bmp.DeleteObject();
MyDC.DeleteDC();
//选进原来的位图,删除内存位图对象和内存DC
第六步:双击 ”双缓冲“按钮添加以下代码:
GetDC()->StretchBlt(0,0,200,200,&MyDC,0,0,200,200,SRCCOPY);
//把内存DC中的图形粘贴到窗口中;
第七步:双击“普通绘图”按钮添加以下代码:
for(int i=0;i<200;i+=6)
for(int j=0;j<200;j+=6)
GetDC()->Ellipse(i-3,j-3,i+3,j+3);
//按普通方式在窗口中绘制和在内存DC中一样数量和大小的位图;
第八步:运行程序............................
先单击 普通绘图 按钮,大家可以看到绘图的速度有点慢
再单击 双缓冲绘图 按钮,图像马上就显示出来了,
这就是双缓冲和普通绘图的区别了
______________________________________________________________________完成
MFC双缓冲的更多相关文章
- MFC双缓冲解决图象闪烁[转]
转载网上找到的一篇双缓冲的文章,很好用.http://www.cnblogs.com/piggger/archive/2009/05/02/1447917.html__________________ ...
- MFC双缓冲和裁剪问题导致闪烁
问题描述: 应用场景:在对话框中,自定义一个MFC图形控件(为了描述方便,暂定为HSPaintControl),控件覆盖整个对话框的客户区,属于最底层的控件,在这之上放置了很多其他的小图形控件. 问题 ...
- MFC双缓冲绘图(2015.09.24)
问题引入: 最近在尝试编写贪吃蛇游戏时遇到这么一个问题:当系统以较快频率向窗口发送WM_PAINT消息时,调用OnPaint()函数在窗口中绘制图形就会发生闪烁现象. 问题分析: 当我们把绘图过程放在 ...
- MFC双缓冲绘图实例
本人之前一直了解双缓冲绘图的基本原理,但是在研究很久之后才大概知道具体的使用过程,本文将详细介绍本人在实际项目中使用双缓冲绘图的案例. 实现功能:主界面显示某张包含人脸的图片,通过dlib detec ...
- mfc双缓冲绘图
1.要求 在界面加载本地图片并显示,每过100ms改变一张图片显示 2.现象 通过定时器控制CImage,Load,Draw,Destroy,会非常的卡顿.因为Load图片时,会是非常大的数据[所有C ...
- MFC 双缓冲加载背景
首先定义DCmemDc和Bitmap CDC DCmemDc: CBitmap memBitmap; CBitmap *oldBitmap; 然后创建一个适应当前内存的DCmemDc CDC * dc ...
- 《MFC游戏开发》笔记六 图像双缓冲技术:实现一个流畅的动画
本系列文章由七十一雾央编写,转载请注明出处. http://blog.csdn.net/u011371356/article/details/9334121 作者:七十一雾央 新浪微博:http:/ ...
- 【MFC】利用双缓冲和随机函数rand()实现蒲公英飞舞
原始日期:2014-05-29 22:44 这几天有些懒,几乎没怎么学MFC了,好容易有个题目:用双缓冲实现蒲公英飞舞,想来想去也没想到好方法,索性动手开始 写了 ,这一写,得,出来了,呵呵,无意中产 ...
- MFC加载PNG图片并实现双缓冲
因为PNG包含Alpha通道,所以不同于BITMAP,在MFC中使用CImage类对其进行处理,通常使用load和draw成员函数. 所以标题的论述可以进一步解释为,使用CImage实现双缓冲. 通常 ...
随机推荐
- 百度统计数据导出demo的坑
1.用户名中文的问题 由于demo文件格式的问题,如果用户名使用中文的话,会出现一下问题 ----------------------preLogin---------------------- [ ...
- 《C Primer Plus(第6版)(中文版)》普拉达(作者)epub+mobi+azw3
内容简介 <C Primer Plus(第6版)中文版>详细讲解了C语言的基本概念和编程技巧. <C Primer Plus(第6版)中文版>共17章.第1.2章介绍了C语言编 ...
- java递归调用 return的问题
最近比较闲,写了个递归调用获取最大公约数,刚开始写错了,但一直不明白错在哪,错误代码如下: public class Demo { public static void main(String[] a ...
- 写给java web一年左右工作经验的人
摘要 大学就开始学习web,磕磕绊绊一路走过来,当中得到过开源社区很多的帮助,总结了这些年来的技术积累,回馈给开源社区. ps:图片都是从网上盗...感谢原作者. ps:文字千真万确都是我自己写的 ...
- 使用 XMLBeans 进行编程
深入考察 XMLBeans 的特性和功能.本文通过一个简单的例子介绍 XMLBeans 技术,然后一步一步地介绍编译和绑定的过程,讨论 XML 游标.标记和 XQuery 表达式等高级特性.本文还 ...
- Ubuntu18.04 ElasticSearch7.3.2集群搭建(一)
集群规划: Hostname Elasticsearch Kibana Marvel Marvel Client node01 √ √ √ √ node02 √ √ node03 √ √ node04 ...
- Java的SpringMVC执行流程
SpringMVC找Controller流程 1.扫描整个项目(Spring已经做了)定义一个Map集合. 2.拿到所有加了@Controller注解的类. 3.遍历类里面的所有方法对象. 4.判断方 ...
- Ubuntu系统配置Zabbix前端及中文乱码解决方案
Ubuntu系统配置Zabbix前端及中文乱码解决方案 作者:尹正杰 版权声明:原创作品,谢绝转载!否则将追究法律责任. 一.安装zabbix 博主推荐阅读: https://www.cnblogs ...
- 针对phpstudy默认设置的利用
在phpstudy下载下来以后路径,设置没有修改的情况下可以使用此方法 url:http://ip/phpmyadmin用户名:root 密码:root登入管理界面变量-->general lo ...
- 数十万PhpStudy用户被植入后门,快来检测你是否已沦为“肉鸡”!
北京时间9月20日,杭州公安发布<杭州警方通报打击涉网违法犯罪暨‘净网2019’专项行动战果>一文,文章曝光了国内知名PHP调试环境程序集成包“PhpStudy软件”遭到黑客篡改并植入“后 ...