c++双缓冲程序设计.docVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
c双缓冲程序设计

《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;i200;i+=6) for(int j=0;j200;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;i200;i+=6) for(int j=0;j200;j+=6) GetDC()-Ellipse(i-3,j-3,i+3,j+3); //按普通方式在窗口中绘制和在内存DC中一样数量和大小的位图; 第八步:运行程序............................ 先单击 普通绘图 按钮,大家可以看到绘图的速度有点慢 再单击 双缓冲绘图 按钮,图像马上就显示出来了, 这就是双缓冲和普通绘图的区别了 ______________________________________________________________________完成 双缓冲技术说起来也没有那么神秘,举个形象一点的例子吧,有两张纸A和B, 纸A代表屏幕,纸B代表后台缓冲,我们将所有的绘图操作都显示在纸B上,然后将纸B覆盖在纸A上,这样体现在纸A上的操作就是绘制了整张图,体现在纸B上的就是纷繁复杂的绘图操作。 技术上实现起来也很简单,VS2010甚至都已经给出了一个CMemDC的类,这个类就可以提供缓冲的作用。 如果在一个函数体内部想要实现双缓冲,那么过程清晰的展开就如同下列样子: CDC MemDC; //首先定义一个显示设备对象 ,就像一只画笔。 CBitmap MemBitmap;//定义一个位图对象 ,这个就如同纸B ,但现在还是无限大的 //随后建立与屏幕显示兼容的内存显示设备 , 就像给将要绘制的图像定一个基调,是黑白图、彩色图、灰度图? MemDC.CreateCompatibleDC(NULL); //这时还不能绘图,因为没有地方画 ^_^ //下面建立一个与屏幕显示兼容的位图,至于位图的大小嘛,可以用窗口的大小 ,这里就是将大纸裁剪成合适的大小 MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight); //将位图选入到内存显示设备中 //只有选入了位图的内存显示设备才有地方绘图,画到指定的位图上 ,将画笔拿在手里,这个时候就能在纸B上开画了,否则空手怎么画? CBitmap *pOldBit=MemDC.SelectObject(MemBitmap); //

文档评论(0)

cuotian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档