基于双缓冲技术的VC_图形刷新技术的原理和实现_第1页
基于双缓冲技术的VC_图形刷新技术的原理和实现_第2页
基于双缓冲技术的VC_图形刷新技术的原理和实现_第3页
基于双缓冲技术的VC_图形刷新技术的原理和实现_第4页
基于双缓冲技术的VC_图形刷新技术的原理和实现_第5页
已阅读5页,还剩3页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、2010年第6期福建电脑基于双缓冲技术的VC+图形刷新技术的原理和实现张亮(扬州工业职业技术学院电子信息工程系江苏扬州225127【摘要】:在VC+中,如果采用传统的图形绘制技术,当程序窗体的内容经常刷新时,会导致屏幕或窗口出现闪烁,严重影响显示效果。而采用双缓冲技术则可以很好的解决这一问题。本文主要分析了双缓冲技术的原理,介绍了其和传统图形刷新技术的不同之处,并给出了在VC中使用双缓冲技术进行绘图的程序框架,对同类研究有一定的参考作用。【关键词】:VC+;双缓冲;绘图1、引言在Windows这样一个图形化操作系统下进行可视化程序设计时,程序界面的设计对整个程序的成功起着非常关键的作用。从本质

2、上来说,我们在Windows环境下看到的各种可视化元素,如菜单、窗口、图像等,都是在一定的指令控制下,由操作系统绘制完成的。因此,如果想在开发Windows程序时绘制图形,使用windows sdk提供的底层API函数是最直接的方法。然而,底层API函数虽然功能强大,但使用起来较为繁琐,同时开发者必须对系统的底层原理有较深的理解,才能很好的掌握。因此,对开发者的要求较高。为了解决这一问题,VC+使用MFC对系统底层的绘图API函数进行了封装,提供了一系列用于绘图的类和对象,开发者可以使用面向对象的开发方法,十分方便的使用这些类和对象在程序中进行图形的绘制。可以说,VC+的出现,大大简化了在Wi

3、ndows平台下进行图形绘制的难度。然而,传统的VC+图形绘制技术有一个缺陷,即当程序窗体的内容刷新时,会导致屏幕或窗口出现闪烁,严重影响显示效果。本文对出现这一现象的原理进行了深入分析,同时给出了采用双缓冲技术的解决方案。2、图形闪烁原理用VC+开发程序,本质是对各种消息进行相应,对图形进行绘制也是如此。在程序代码中,一般将绘制图形的代码放在OnPaint或OnDraw函数中,当系统产生WM_PAINT消息时,上述函数会自动进行消息相应,从而实现图形的绘制。在图形很少改变或者程序窗口很少刷新时,这样的处理方法没有任何问题,但是如果程序窗体的内容经常刷新,图形就会出现闪烁。很多人认为出现这样的

4、现象是图形刷新速度过快而造成的,实际上,在程序中,比如最小化最大化,移动窗体,覆盖等等都会引起图形的重绘。然而通过实验,我们可以发现,刷新速度并不是造成图形闪烁的最根本的原因。通过编写一个刷新速度很慢的应用程序可以发现,即使程序窗口的刷新速度很慢,但是在每次刷新的时候仍然存在闪烁的问题,只是闪烁没有快速刷新时那么明显。在本质上,造成图形闪烁的原因实际上是相邻两帧图像之间存在的巨大差异。而造成这一差异的原因又在于VC本身的处理机制。在VC中,窗体每次刷新时,将自动调用OnEraseBkgnd函数,该函数的作用是利用系统背景色填充窗体绘图区,在填充完了之后,系统才会重新调用绘图代码对窗口进行重绘。

5、在默认情况下,系统背景色一般为白色,因此每次重绘时,相当于在相邻两帧图像间插入了一帧全白的图像。而白色一般与绘图颜色差别很大,因此,这样一擦一写造成了图象颜色的巨大反差。当WM_PAINT的响应很频繁的时候,这种反差也就越发明显。于是我们就看到了闪烁现象。要解决这一问题,我们首先直接能想到的方法就是禁用OnEraseBkgnd函数,避免系统对窗口进行白色填充。但是这样的处理方法又会带来新的问题,因为每次绘制图象的时候都没有将原来的图象清除,造成了图象的残留,于是窗体重绘时,如果没有重绘所有的区域,画面往往会变的混乱。所以单纯的禁止背景重绘是不够的,还必须重新对窗体的所有区域进行重绘。由于要对所

6、有区域进行重绘,传统的方法可能就不够迅速,此时,就必须采用双缓冲技术进行处理。3、双缓冲技术的原理和实现双缓冲图形刷新技术顾名思义是采用双缓存实现的。传统的绘图方式实际上是一种单缓冲。在Windows中每一种设备都在内存中有一个设备描述表与其对应,这个设备描述表实际上就是一个内存缓冲区。传统的绘图中我们是将图形绘制在设备描述表缓冲区中,然后由gdi自动的将设备描述表中的图像拷贝到显存中进行显示。这样一个自动的拷贝过程屏蔽了传统的绘图方式是单缓冲的实质,使我们感觉到我们是在直接操纵显存一样。双缓冲图形刷新技术在内存中有两快缓存,除了设备描述表以外还有一快需要手动建立的与设备描述表缓冲区相兼容的后

7、备缓冲区。绘图过程中,首先将图形绘制在后备缓冲区中,然后再手动的将后备缓冲区中的图像拷贝到前端缓冲区中,再由gdi自动将前端缓冲区中的图像拷贝到显存完成图形的显示过程。在实际中,我们使用BitBlt函数。它可以支持图形块的复制,速度很快。我们可以先在内存中作图,然后用此函数将做好的图复制到前台,同时禁止背景刷新,这样就消除了闪烁。以上也就是双缓冲绘图的基本的思路。在VC中,我们可以按照以下步骤来使用双缓冲技术进行图形的绘制:1、创建与窗口设备描述表(前端缓冲区兼容的内存设备描述表(后端缓冲区。2、创建与内存设备描述表相兼容的位图并将该位图选入内存设备描述表中。3、将图形绘制在内存设备描述表中。

8、4、将内存设备描述表中的内容拷贝到窗口设备描述表。5、释放设备描述表句柄、位图等资源。示例代码如下:/以下代码应放置于OnPaint或OnDraw函数中CDC MemDC;/首先定义一个显示设备对象CBitmap MemBitmap;/定义一个位图对象MemDC.CreateCompatibleDC(NULL;/随后建立与屏幕显示兼容的内存显示设备MemBitmap.CreateCompatibleBitmap(pDC,nWidth,nHeight;建立一个与屏幕设备描述表兼容的位图MemDC.SelectObject(&MemBitmap;/将位图选入到内存设备描述表MemDC.FillSo

9、lidRect(m_rect,RGB(0,0,0;/用背景色将位图清除干净/具体的绘图代码省略,可根据不同项目具体实现pDC-BitBlt(0,0,nWidth,nHeight,&MemDC,0,0,SRCCOPY;/将后备缓冲区中的图形拷贝到前端缓冲区MemBitmap.DeleteObject(;MemDC.DeleteDC(;/绘图完成后的清理4、结论双缓冲技术原理并不复杂,实现起来也很简单,但是效果非常理想,能完美解决刷新时图形闪烁的问题,这一技术在使用VC进行图形绘制时,是必不可少的技术,值得(下转第137页1102010年第6期福建电脑 (上接第115页!(上接第110页!所有使用

10、VC 的程序开发人员学习。参考文献:1侯捷.深入浅出MFCM.华中科技大学出版社,20012潘爱民;王国印.Visual C+技术内幕(第4版M.清华大学出版社,2009准,定义一系列SOAP 消息头块(Header Block 以包含数字签名、加密信息和安全令牌等安全信9。针对用户身份信息数据库而言,我们可以把用户个人数据存储为密文形式,可以使用对称密钥算法,例如DES 算法,在用户注册操作中,我们要求用户额外输入一些字符串作为DES 加密的私钥,由指定的加密处理逻辑将用户的个人数据转换为密文形式,然后再存入相应的数据表中,这样可以增强数据库的安全性。5、总结随着Internet 技术发展和

11、高等教育体制改革的不断深入,高职院校的系务管理信息化、网络化建设越来越显得举足轻重,其对学院的发展、人才的培养都起着重要的作用。该系统能够方便、及时地和用户进行交互,单位对系务工作的管理也将由以前的单一纵向管理向不同用户、不同部门间横向管理转变,提高了设备的利用率,降低了成本,它使系务日常的管理方法发生了很大的变化,减轻了工作人员的劳动强度,提高了管理的质量和工作效率。同时系统中的每个模块都有它的独立性和整体性,可根据需要增加系统的功能模块,易于维护和升级。参考文献:1曲学勇,我国高职教育管理的现状分析及改革建议J.教育与职业,2003,15:1.2 2008年全国教育事业发展统计公报3杨敬伟

12、,薛与倩,刘振鹏.基于C/S 和B/S 混合模式的软件结构体系J.河北大学学报,2006,26(3:315-3184刘佩贤.Web Services 体系结构和应用研究D.北京:北京化工大学,2008.5陈江.教师档案管理系统的开发J.中国科技信息,2007,22:114-114.6杨小影,徐红霞.基于B /S 结构学生管理系统的实现J.宁波职业技术学院学报,2009,13(2:73-75.7黄晟.基于面向服务架构的交通规费系统研究与实现:D.湖南:湖南大学,2007.8张媛,王坤侠.基于.NET 技术的学生管理系统的设计与实现J.科技资讯,2006,35:8-9.9石伟鹏、杨小虎.基于SOA

13、P 协议规范的Web Service 安全基础规范(WS-Secrity J.计算机应用与研究,2003,2.库,学籍数据库包括汕头职业技术学院所有在读学生的学籍信息,导入时是Excel 格式。在每次等级考试成绩出来之后教务员可以导入学生等级考试成绩,以便系统可以判断学生可以报考的类型。3.在导入学籍数据库完成之后教务员可以根据需要随时维护学籍数据库的信息。4.在每一次报名开始前教务员可以初始化数据库,包括:设置学生的默认登录密码,更新学生的报名权限和清除学生上次报名的状态。在设置学生的报名权限时可以根据学生的系别和年级分开设置,也可以将其综合起来进行设置。5.在学生完成报名后教务员可以管理报

14、名信息,并对报名信息进行统计,统计时可以按年级分级别来统计,而且学生在报名时还可以选择是否参加学校组织的辅导,统计的内容包括报名的人数和想参加辅导的人数。6.统计完报名信息后教务员可以以Excel 的格式导出报名信息。报名信息包括B 级、四级和六级的报名表,报考人数汇总表和报名班级统计表。而且报名信息可按不同校区分别导出。7.教务员可以下载已导出的表格并且进行管理员信息的维护。8.在非报名期间教务员可以设置禁止学生报名。3.系统测试本系统在2009年2月份测试完毕,在测试过程中主要运用测试法,并对系统做了压力测试,取得良好的效果。本系统于3月份投入运行,至今已经顺利完成3次英语等级考试报名任务,受到用户的好评。如图2是系统后台管理模块中的导入数据库子模块。4.结论汕职院英语等级考试报名系统整合了数据库技术和网站开发技术,实现了当前主流在线信息处理系统的基本功能,有效的解决了学生英语等级考试报名工作量巨大的问题,极大的提高了教务处的工作效率。但是系统的设计也存在一些缺陷,比如对学生报名权限的设置方面不能按照班级,专业或个人来设置;在管理学籍数据库方面也没有提供模糊查询。因此,本人希望在第一版的基础上总结使用中出现的问题,然后设计并开发第二版,让学校的教

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论