《三维模型浏览工具软件设计与开发毕业论文.doc》由会员分享,可在线阅读,更多相关《三维模型浏览工具软件设计与开发毕业论文.doc(63页珍藏版)》请在三一办公上搜索。
1、 毕业设计(论文)三维模型浏览工具软件设计与开发 学 院 计算机与电子信息学院 专 业 计算机科学与技术 班 级 2009级2班 学 号 09307300307 姓 名 指导老师 2013年05月25日摘要随着计算机技术的快速发展,计算机图形学也日趋成熟,二维图形技术已经不能满足人们需求,三维图形技术应运而生。三维图形技术的立体真实感显示使之渐渐成为图形领域的主流,至此三维图形标准也应运而生,OpenGL就是其中最具代表性的,良好的接口和设备无关的特性,已成为各大IT厂商的宠儿。基于OpenGL技术,许多优秀的三维绘图软件也相继推出,像3D MAX、Pro/E、UG、SolidEdge等,它们
2、逼真的造型给人们的工作和生活带来了极大的便利和乐趣,并且随着网络技术的推广和普及,各种文件格式的三维模型库也越来越充实,充分利用这些模型库会给我们的工作带来事半功倍的效果。因此,本文旨在开发一个能够浏览现在较为流行的3DS格式文件的小软件,为用户提供一个方便的三维浏览器工具。针对现在流行的一些三维浏览器功能繁杂、体积庞大的劣势,将着重点放在程序的简单实用上,本着能满足用户使用需求的前提下,尽量使操作简单明了。同时由于该软件体积小,功能单一,并且基于服务器的形式开发,希望能够以第三方插入的形式,为一些流行的软件提供服务。关键词:OpenGL 计算机图形学 3DS 三维模型 浏览器Browse d
3、imensional model design and development of software toolsAbstract With the rapid development of computer technology, computer graphics matures, two-dimensional graphics technology can not meet peoples needs, the three-dimensional graphics technology came into being. Three-dimensional realism of 3D g
4、raphics technology gradually become the mainstream in the field of graphics have emerged, bringing the three-dimensional graphics standard OpenGL is one of the most representative of the characteristics of a good interface and device-independent, has become a major IT vendors the darling. OpenGL-bas
5、ed technology, excellent 3D graphics software is launched, such as 3D MAX, Pro / E, UG, SolidEdge, realistic shape to peoples work and life has brought great convenience and fun, and with the network technology and the popularization of various file formats 3D model library is also more and more sub
6、stantial, take advantage of these model library will give our work a multiplier effect. Therefore, this paper aims to develop a view now more popular 3DS format files software, to provide users with a convenient 3D browser toolbar. Now popular 3D browser capabilities complicated, bulky disadvantage,
7、 with the focus on the program is simple and practical, under the premise of the spirit can meet user needs, try to make the operation simple and straightforward. At the same time, due to the small size of the software, single function, and the form of server-based development, and hope to be able t
8、o form inserted by third parties to provide services for a number of popular software. Key words: OpenGL Computer Graphics 3DS 3D model browser目录摘要IAbstractII第一章 绪论31.1研究背景31.2研究的目的和意义31.3国内外的研究现状41.4课题主要研究内容5第二章 关键技术介绍62.1计算机图形学介绍62.2 OpenGL介绍72.2.1 OpenGL 特点及功能72.2.2 OpenGL 库函数92.2.3 OpenGL 工作结构10
9、2.2.4 OpenGL 工作流程11第三章 需求分析与功能设计133.1 系统需求133.2 功能设计133.2.1 功能划分133.2.2 功能描述133.3 类图描述14第四章 开发平台154.1 C+语言的发展154.2 面向对象编程164.3 MFC174.3.1 MFC 简介174.3.2 MFC 类库组成174.3.3 MFC 文档视图结构194.3.4 Microsoft Visual Studio 2010与OpenGL21第五章 3DS文件结构235.1 3DS文件结构层次235.2 3DS编辑器块275.3 3DS关键帧块32第六章 程序的具体实现336.1 程序结构概述
10、336.1.1程序框架构建336.1.2 窗口设计346.1.3 程序流程图356.2 程序中的数据结构366.2.1全局变量366.2.2结构体376.3 程序实现过程386.3.1 OpenGL环境设置386.3.2 3DS文件数据读取与数据处理415.3.3 3DS文件显示436.3.4 图形控制445.4程序效果46第七章 总结和展望497.1 总结497.2 进一步的研究方向49致谢50参考文献51附录52第一章 绪论1.1研究背景随着计算机软硬件突飞猛进的发展,计算机图形学在各个行业的应用也得到了迅速普及和深入。目前,计算机图形学已进入三维时代,三维图形在人们周围无所不在。科学计算
11、可视化、计算机动画和虚拟现实已经成为近年来计算机图形学的三大热门话题,而这三大热门话题的技术核心均为三维图形。三维图形技术在建筑虚拟、城市规划、场景漫游、效果场景制作、城市规划、房地产开发、虚拟教育、展馆展示、古迹复原、交通线路设计、3D游戏等各方面都有广泛的实际应用。特别是近两年,中国的网络游戏产业正处于一个迅猛发展的时期,网络游戏已经形成为一个巨大的产业。从整体上来看,目前中国网络游戏产业的发展呈现出统一性和协调性,并且逐渐形成了完整的产业链,网络游戏出版产业的价值链设计到了电信行业、IT行业、媒体、传统出版行业、批发与零售行业等。1.2研究的目的和意义由于人类获取的信息有70%左右是来自
12、于视觉,在各种教学媒体中,图形图像的使用极为重要,图形图像包含的信息量最大,是知识形态最直观的表达,它形象直观的表现形式,可以使复杂的问题变得简单,使深奥的问题变得浅显,有利于激发学生学习兴趣,深受学生和老师的喜爱。尤其在计算机技术飞速发展的今天,为计算机图形学开创了新的局面,三维图形的绘制和显示已经是轻而易举的事情,各种格式的三维图形更是层出不穷。人们已不再满足于过去的二维平面绘图,三维立体绘图已成为时代的主流。在电子课堂教学中,三维图形更是展示了自身的魅力。但是使用三维绘图软件作出的图形多是静态的,我们总是希望能够自如地控制所作的图形进行翻转、移动、缩放,甚至着色等处理,以满足各种各样的观
13、察要去。三维图形浏览软件正是解决这一问题的最好工具。1.3国内外的研究现状1992年7月 ,美国硅图公司 SGI公司发布了OpenGL(open graphics library)。OpenGL和三维技术都是是计算机图形发展的产物,OpenGL是定义了一个跨编程语言、跨平台的编程接口的规格,如今OpenGL仍然是唯一能够取代微软对3D图形技术的完全控制的API。它仍然具有一定的生命力,但是Silicon Graphics已经不再以任何让微软不悦的方式推广OpenGL,因而它存在较高的风险。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用OpenGL。因此,硬件开发商正在设
14、法加强对它的支持。Direct3D目前还不能支持高端的图形设备和专业应用; OpenGL在这些领域占据着统治地位。1992年,OpenGL 1.0诞生,此后历经二十年发展,先后衍生了四个世代,功能日渐强大,普及范围也是越来越广。而且陆续衍生了OpenGL ES、OpenCL、WebGL等一帮同门师兄弟,生态系统日臻完善。截止2012年8月7日,Khronos Group公布了最新的OpenGL 4.3规范。 新版标准不仅带来了更好的图形表现,同时也增加了更多之前没有的效果,比如不同类型的模糊效果。此外,开发者还可以不通过OpenCL直接使用OpenGL技巧来使用运算着色器(compute sh
15、aders)释放GPU上的任务。这样开发者可以在游戏中不耗用更多CPU功耗的情况下实现更好的物理和人工智能的模拟。 从当前的现状来看,Open GL仍然是唯一能够取代微软对3D图形技术的完全控制的API。游戏开发人员是一个有着独立思想的群体,很多重要的开发人员目前仍然在使用Open GL。因此,硬件开发商正在设法加强对它的支持。Direct3D目前还不能支持高端的图形设备和专业应用OpenGL在这些领域占据着统治地位。目前,国内的三维游戏开发技术正处于赶超国外的关键时期,从创意、策划、研究开发与实现,到游戏的运营与维护,都有大量的知识值得学习和摸索。由于 Linux 操作系统平台的大力推广,基
16、于Linux 的各种应用软件也不断壮大,因此基于跨平台图形库的跨平台三维游戏开发也越来越受重视。OpenGL是一种独立的平台无关的三维图形开发库,在各种语言下进行主框架开发并结合应用OpenGL 函数都可以开发出三维游戏。但是由于框架开发的平台相关性使游戏无法跨平台编译运行,因此glut+OpenGL 的方式成了一种很好的选择1。1.4课题主要研究内容本课题旨在开发一个能够浏览常用三维文件格式,功能独特、利于实用,能够满足使用要求的三维图形浏览软件。而且,该浏览软件是以完全服务器的模式构建,希望能够作为某些“容器”应用程序的插件,拓展其功能。由于时间和知识水平的限制,本程序只是以3DS格式文件
17、作为研究的对象,学习对3DS格式文件的读取显示,并在OpenGL绘图环境下对图形加以控制,最后生成的可执行文件可以独立运行。 3D Studio 是现在广为流行的三维图形制作工具,在3D 游戏和多媒体制作方面,深受用户的欢迎。3DS 文件是3D Studio 的主要文件格式之一。随着网络的推广和普及,网络上3DS 文件素材库也越来越充实,但这些图形都是静态的,作者以VC+6.0 为开发工具,基于OpenGL 绘图环境,将3DS 格式文件的信息读出显示,并用OpenGL 的功能对图形进行控制,为浏览这些文件提供了一个便利的工具2。第二章 关键技术介绍2.1计算机图形学介绍计算机图形学(Compu
18、ter Graphics,简称CG)是一种使用数学算法将二维或三维图形转化为计算机显示器的栅格形式的科学。简单地说,计算机图形学的主要研究内容就是研究如何在计算机中表示图形、以及利用计算机进行图形的计算、处理和显示的相关原理与算法3。科学广义的分类,可分为以下几类: 几何:研究面的表示和处理的方法 动画:研究移动的表示和操作方法 图像拟真/渲染:研究模拟光线传递效果的算法 图像:研究图像的获取或是编辑 图形通常由点、线、面、体等几何元素和灰度、色彩、线型、线宽等非几何属性组成。从构成要素上看,图形主要分为两类,一类是几何要素在构图中具有突出作用的图形,如工程图、等高线地图、曲面的线框图等,另一
19、类非几何要素在构图中具有突出作用的图形,如明暗图、晕渲图、真实感图形等。 计算机图形学一个主要的目的就是要利用计算机产生令人赏心悦目的真实感图形。为此,必须建立图形所描述的场景的几何表示,再用某种光照模型,计算在假想的光源、纹理、材质属性下的光照明效果。所以计算机图形学与另一门学科计算机辅助几何设计有着密切的关系。事实上,图形学也把可以表示几何场景的曲线曲面造型技术和实体造型技术作为其主要的研究内容。同时,真实感图形计算的结果是以数字图像的方式提供的,计算机图形学也就和图像处理有着密切的关系。 图形与图像两个概念间的区别越来越模糊,但还是有区别的:图像纯指计算机内以位图形式存在的灰度信息,而图
20、形含有几何属性,或者说更强调场景的几何表示,是由场景的几何模型和景物的物理属性共同组成的。计算机图形学的研究内容非常广泛,如图形硬件、图形标准、图形交互技术、光栅图形生成算法、曲线曲面造型、实体造型、真实感图形计算与显示算法、非真实感绘制,以及科学计算可视化、计算机动画、自然景物仿真、虚拟现实等。2.2 OpenGL介绍OpenGL(Open Graphics Library)是个定义了一个跨编程语言、跨平台的编程接口的规格,是以SGI的GL三维图形库为基础制定的一个开放式三维图形标准,它用于三维图象(二维的亦可)。OpenGL是个专业的图形程序接口,是一个功能强大,调用方便的底层图形库。 O
21、penGL规范由ARB(OpenGL Architecture Review Board,OpenGL结构评审委员会)负责管理,目前加入OpenGL ARB的成员有SGI、Microsoft、Intel、IBM、SUN、Compaq、HP等公司,它们均采用了OpenGL图形标准,许多软件厂商以OpenGL为基础开发自己的产品,硬件厂商提供对OpenGL的支持。由于OpenGL的广泛应用,它已经成为一个工业标准。2.2.1 OpenGL 特点及功能OpenGL是一个开放的三维图形软件包,它独立于窗口系统和操作系统,以它为基础开发的应用程序可以十分方便地在各种平台间移植;OpenGL可以运行在当前
22、各种流行操作系统之上,如Windows95/98、Windows NT/2000、Linux、Mac OS、Unix、OS/2等。特别需要指出的是,由于Microsoft公司在其Windows95或更高版本的操作系统和Visual系列高级语言开发环境中捆绑了OpenGL标准,使得OpenGL在微机中得到了更为普遍的应用;OpenGL可以与各种编程语言紧密接口。各种流行的编程语言如C、C+、Fortran、Ada、Java等都可以调用OpenGL中的库函数。在包含CAD2、内容创作、能源、娱乐、游戏开发、制造业、制药业及虚拟现实等行业领域中,OpenGL帮助程序员实现在 PC、工作站、超级计算机
23、等硬件设备上的高性能、极具冲击力的高视觉表现力图形处理软件的开发。OpenGL使用简便,效率高。它具有七大功能:1.建模:OpenGL图形库除了提供基本的点、线、多边形的绘制函数外,还提供了复杂的三维物体(球、锥、多面体、茶壶等)以及复杂曲线和曲面绘制函数。2.变换:OpenGL图形库的变换包括基本变换和投影变换。基本变换有平移、旋转、变比镜像四种变换,投影变换有平行投影(又称正射投影)和透视投影两种变换。其变换方法有利于减少算法的运行时间,提高三维图形的显示速度。3.颜色模式设置:OpenGL颜色模式有两种,即RGBA模式和颜色索引(Color Index)。4.光照和材质设置:OpenGL
24、光有辐射光(Emitted Light)、环境光(Ambient Light)、漫反射光(Diffuse Light)和镜面光(Specular Light)。材质是用光反射率来表示。场景(Scene)中物体最终反映到人眼的颜色是光的红绿蓝分量与材质红绿蓝分量的反射率相乘后形成的颜色。5.纹理映射(Texture Mapping)。利用OpenGL纹理映射功能可以十分逼真地表达物体表面细节。6.位图显示和图象增强图象功能除了基本的拷贝和像素读写外,还提供融合(Blending)、反走样(Antialiasing)和雾(fog)的特殊图象效果处理。以上三条可使被仿真物更具真实感,增强图形显示的效
25、果。7.双缓存动画(Double Buffering)双缓存即前台缓存和后台缓存,简言之,后台缓存计算场景、生成画面,前台缓存显示后台缓存已画好的画面。 8.特殊效果利用OpenGL还能实现深度暗示(Depth Cue)、运动模糊(Motion Blur)等特殊效果,从而实现了消隐算法。运动模糊的绘图方式(motion-blured),模拟物体运动时人眼观察所感觉的动感现象。深度域效果(depth-of-effects),类似于照相机镜头效果,模型在聚焦点处清晰,反之则模糊。2.2.2 OpenGL 库函数1. OpenGL核心库: 核心库包含有115个函数,函数名的前缀为gl。这部分函数用于
26、常规的、核心的图形处理。此函数由gl.dll来负责解释执行。由于许多函数可以接收不同数以下几类。据类型的参数,因此派生出来的函数原形多达300多个。2. OpenGL实用库The OpenGL Utility Library (GLU):包含有43个函数,函数名的前缀为glu。OpenGL提供了强大的但是为数不多的绘图命令,所有较复杂的绘图都必须从点。线、面开始。Glu 为了减轻繁重的编程工作,封装了OpenGL函数,Glu函数通过调用核心库的函数,为开发者提供相对简单的用法,实现一些较为复杂的操作。此函数由 glu.dll来负责解释执行。OpenGL中的核心库和实用库可以在所有的OpenGL
27、平台上运行。3. OpenGL辅助库:包含有31个函数,函数名前缀为aux。这部分函数提供窗口管理、输入输出处理以及绘制一些简单三维物体。此函数由glaux.dll来负责解释执行。创建aux库是为了学习和编写 OpenGL程序,它更像是一个用于测试创意的预备基础接管。Aux库在windows实现有很多错误,因此很容易导致频繁的崩溃。在跨平台的编程实例和演示中,aux很大程度上已经被glut库取代。OpenGL中的辅助库不能在所有的OpenGL平台上运行。4. OpenGL工具库 OpenGL Utility Toolkit:包含大约30多个函数,函数名前缀为glut。glut是不依赖于窗口平台
28、的OpenGL工具包,由Mark KLilgrad在SGI编写(现在在Nvidia),目的是隐藏不同窗口平台API的复杂度。函数以glut开头,它们作为aux库功能更强的替代品,提供更为复杂的绘制功能,此函数由glut.dll来负责解释执行。由于glut中的窗口管理函数是不依赖于运行环境的,因此OpenGL中的工具库可以在X-Window, Windows NT, OS/2等系统下运行,特别适合于开发不需要复杂界面的OpenGL示例程序。对于有经验的程序员来说,一般先用glut理顺3D图形代码,然后再集成为完整的应用程序。5. Windows函数库(WGL):包含有6个WGL函数。专门用于Op
29、enGL和Windows窗口系统的联接,其前缀为wgl,主要用于创建和选择图形操作描述表(renderingcontexts)以及在窗口内任一位置显示字符位图。6. Win32 API函数库:包含有6个函数,函数名无专用前缀。 这部分函数主要用于处理像素存储格式和双帧缓存。这6个函数将替换Windows GDI中原有的同样的函数。Win32API函数库只能用于Windows 95/98/NT环境中4。2.2.3 OpenGL 工作结构OpenGL的作用机制是客户(client)/服务器(sever)机制,即客户(用OpenGL绘制景物的应用程序)向服务器(即OpenGL内核)发布OpenGL命
30、令,服务器则解释这些命令5。大多数情况下,客户和服务器在同一机器上运行。正是OpenGL的这种客户/服务器机制,OpenGL可以十分方便地在网络环境下使用。因此Windows NT下的OpenGL是网络透明的。正象Windows的图形设备接口(GDI)把图形函数库封装在一个动态链接库(Windows NT下的GDI32.DLL)内一样,OpenGL图形库也被封装在一个动态链接库内(OPENGL32.DLL)。受客户应用程序调用的OpenGL函数都先在OPENGL32.DLL中处理,然后传给服务器WINSRV.DLL。OpenGL的命令再次得到处理并且直接传给Win32的设备驱动接口(Devic
31、e Drive Interface,DDI),这样就把经过处理的图形命令送给视频显示驱动程序。图2-1简要说明这个过程。图2-1 OpenGL工作结构2.2.4 OpenGL 工作流程 整个OpenGL的基本工作流程如图2-2。图2-2 OpenGL基本工作流程 其中几何顶点数据包括模型的顶点集、线集、多边形集,这些数据经过流程图的上部,包括运算器、逐个顶点操作等;图像数据包括象素集、影像集、位图集等,图像象素数据的处理方式与几何顶点数据的处理方式是不同的,但它们都经过光栅化、逐个片元(Fragment)处理直至把最后的光栅数据写入帧缓冲器。在OpenGL中的所有数据包括几何顶点数据和象素数据
32、都可以被存储在显示列表中或者立即可以得到处理。OpenGL中,显示列表技术是一项重要的技术6。 OpenGL要求把所有的几何图形单元都用顶点来描述,这样运算器和逐个顶点计算操作都可以针对每个顶点进行计算和操作,然后进行光栅化形成图形碎片;对于象素数据,象素操作结果被存储在纹理组装用的内存中,再象几何顶点操作一样光栅化形成图形片元6。 整个流程操作的最后,图形片元都要进行一系列的逐个片元操作,这样最后的象素值BZ送入帧缓冲器实现图形的显示6。 根据这个流程可以归纳出在OpenGL中进行主要的图形操作直至在计算机屏幕上渲染绘制出三维图形景观的基本步骤: 1)根据基本图形单元建立景物模型,并且对所建
33、立的模型进行数学描述(OpenGL中把:点、线、多边形、图像和位图都作为基本图形单元)。 2)把景物模型放在三维空间中的合适的位置,并且设置视点(viewpoint)以观察所感兴趣的景观。 3)计算模型中所有物体的色彩,其中的色彩根据应用要求来确定,同时确定光照条件、纹理粘贴方式等。 4)把景物模型的数学描述及其色彩信息转换至计算机屏幕上的象素,这个过程也就是光栅化(rasterization)。 在这些步骤的执行过程中,OpenGL可能执行其他的一些操作,例如自动消隐处理等。另外,景物光栅化之后被送入帧缓冲器之前还可以根据需要对象素数据进行操作。 第三章 需求分析与功能设计3.1 系统需求随
34、着计算机图形的高速发展,三维图形在人们的日常工作和生活中越来越得到了广泛的关注。在多媒体、网络游戏、虚拟技术中也得到了广泛的应用。为了更加方便和快速的浏览三维图形,开发一个轻巧实用的三维图形浏览软件是很有必要的。本文的目标就是开发一个轻巧实用能对3DS格式文件的的三维模型浏览软件,实现:三维图形进行完整显示、移动、缩放、旋转。3.2 功能设计3.2.1 功能划分用户通过文件打开功能打开3DS格式文件,三维图形浏览软件为用户提供了3项功能:1)对三维模型进行移动浏览;2)对三维模型进行缩放浏览;3)对三维模型进行旋转浏览等功能 。 3.2.2 功能描述1)对三维模型进行移动浏览通过鼠标的操作对打
35、开的三维模型进行自由移动,任意调整三维模型的位置。2) 对三维模型进行缩放浏览通过鼠标的操作对打开的三维模型进行自由缩放浏览,任意调整三维模模型的大小,以方便观察三维模型的细节部分。3) 对三维模型进行旋转浏览通过鼠标的操作对打开的三维模型进行自由旋转操作,任意调整三维模型的角度,通过此功能可以对三维模型的各个方面进行全面的浏览。3.3 类图描述本程序是运用面向对象的编程思想实现的,期间建立了很多类,这里就比较关键的类作为介绍,见类图3-1。1)3DS格式文件的读取将是这个程序必须解决的重点问题之一,而类C3dsReader正是用以解决读取问题的类,通过对3DS格式文件结构的研究,在C3dsR
36、eader声明定义和3DS文件数据存储相关的数据结构变量,并根据3DS格式文件的结构声明定义成员函数。2) CMy3DSBrowserView类中主要进行3DS格式文件的三维模型进行重绘进而将三维模型显示出来,对三维模型的控制函数也将在该类中实现。3) CTriObject、CTtriList、MaterialDict这三个类都是用来存储3DS格式文件数据的相应数据结构类,分别表示对象数据,对象数据列表,材质列表。图3-1 程序类图第四章 开发平台4.1 C+语言的发展C+语言是一种优秀的面向对象程序设计语言,它在C语言的基础上发展而来,但它比C语言更容易为人们学习和掌握。C+以其独特的语言机
37、制在计算机科学的各个领域中得到了广泛的应用。面向对象的设计思想是在原来结构化程序设计方法基础上的一个质的飞跃,C+完美地体现了面向对象的各种特性 。1982年,美国AT&T公司贝尔实验室的BjarneStroustrup博士在c语言的基础上引入并扩充了面向对象的概念,发明了种新的程序语言。为了表达该语言与c语言的渊源关系,它被命名为c+。此后C+语言历经了不断地完善,例如1990年c+语言引入模板和异常处理的概念,1993年引入运行时类型识别(RTTI)和名字空间(NameSpace)的概念。1997年,c+语言成为美国国家标准(ANSI)。1998年,c+语言又成为了国际标准(ISO)。目前
38、,c+语言已成为使用最广泛的面向对象程序设计语言之一。C+语言发展大概可以分为三个阶段: 第一阶段:从80年代到1995年。这一阶段C+语言基本上是传统类型上的面向对象语言,并且凭借着接近C语言的效率,在工业界使用的开发语言中占据了相当大份额; 第二阶段:从1995年到2000年,这一阶段由于标准模板库(STL)和后来的Boost等程序库的出现,泛型程序设计在C+中占据了越来越多的比重性。当然,同时由于Java、C#等语言的出现和硬件价格的大规模下降,C+受到了一定的冲击; 第三阶段:从2000年至今,由于以Loki、MPL等程序库为代表的产生式编程和模板元编程的出现,C+出现了发展历史上又一
39、个新的高峰,这些新技术的出现以及和原有技术的融合,使C+已经成为当今主流程序设计语言中最复杂的一员7。 4.2 面向对象编程 面向对象编程(Object Oriented Programming,OOP,面向对象程序设计)是一种计算机编程架构。OOP 的一条基本原则是计算机程序是由单个能够起到子程序作用的单元或对象组合而成。OOP 达到了软件工程的三个主要目标:重用性、灵活性和扩展性。为了实现整体运算,每个对象都能够接收信息、处理数据和向其它对象发送信息8。面向对象程序设计中的概念主要包括:对象、类、数据抽象、继承、动态绑定、数据封装、多态性、消息传递。通过这些概念面向对象的思想得到了具体的体
40、现。 1) 对象(Object) 可以对其做事情的一些东西。一个对象有状态、行为和标识三种属性。 2) 类(class) 一个共享相同结构和行为的对象的集合。 3) 封装(encapsulation): 第一层意思:将数据和操作捆绑在一起,创造出一个新的类型的过程。 第二层意思:将接口与实现分离的过程。 4) 继承 类之间的关系,在这种关系中,一个类共享了一个或多个其他类定义的结构和行为。继承描述了类之间的“是一种”关系。子类可以对基类的行为进行扩展、覆盖、重定义。 5) 组合 既是类之间的关系也是对象之间的关系。在这种关系中一个对象或者类包含了其他的对象和类。 组合描述了“有”关系。 6)
41、多态 类型理论中的一个概念,一个名称可以表示很多不同类的对象,这些类和一个共同超类有关。因此,这个名称表示的任何对象可以以不同的方式响应一些共同的操作集合。 7) 动态绑定 也称动态类型,指的是一个对象或者表达式的类型直到运行时才确定。通常由编译器插入特殊代码来实现。与之对立的是静态类型。 8) 静态绑定 也称静态类型,指的是一个对象或者表达式的类型在编译时确定。 9) 消息传递 指的是一个对象调用了另一个对象的方法(或者称为成员函数)。 10)方法 也称为成员函数,是指对象上的操作,作为类声明的一部分来定义。方法定义了可以对一个对象执行那些操作。 4.3 MFC4.3.1 MFC 简介MFC
42、(Microsoft Foundation Classes),是一个微软公司提供的类库(class libraries),以C+类的形式封装了Windows的API,并且包含一个应用程序框架,以减少应用程序开发人员的工作量。其中包含的类包含大量Windows句柄封装类和很多Windows的内建控件和组件的封装类。 微软基础类(Microsoft Foundation Classes),同VCL类似,是一种应用程序框架,随微软Visual C+开发工具发布。目前最新版本为10.0(截止2011年3月),并且发布了中文版。该类库提供一组通用的可重用的类库供开发人员使用,大部分类均从CObject
43、直接或间接派生,只有少部分类例外1。 MFC应用程序的总体结构通常由开发人员从MFC类派生的几个类和一个CWinApp类对象(应用程序对象)组成。MFC 提供了MFC AppWizard 自动生成框架。 Windows 应用程序中,MFC 的主包含文件为Afxwin.h。 此外MFC的部分类为MFC/ATL 通用,可以在Win32 应用程序中单独包含并使用这些类。 由于它的易用性,初学者常误认为VC+开发必须使用MFC,这种想法是错误的。作为Application Framework,MFC的使用只能提高某些情况下的开发效率,只起到辅助作用,而不能替代整个Win32 程序设计9。 4.3.2
44、MFC 类库组成 MFC类库的组成及其丰富,详细类组成见图3-1。在MFC中的类按功能来分可划分为以下几类: (1) 基类 (2) 应用程序框架类,包括:应用程序类、命令相关类、文档/视类、框架窗口类、文档模板类等。 (3) 可视对象类,包括:窗口类、视类、对话框类、控件类、控件条类等。 (4) 绘图类,包括:设备描述表类、绘图工具类等。 (5) 简单数据类型类 (6) 通用类,包括:数组类、类表类、映像类。 (7) 文件和数据库类,包括:文件I/O类、ODBC类、DAO类等。 (8) Internet和网络工作类,包括:ISAPI类、Windows Socket类、Win32 Interne
45、t类等。 (9) OLE类(10) 调试和异常类,包括:调试支持类、异常类等10。图4-1 MFC类库组成4.3.3 MFC 文档视图结构MFC引入了文档/视图(SDI/MDI)结构的概念,理解这个结构是编写基于MFC编写复杂Visual C+程序的关键。关于 MFC SDI/MDI 的知识:文档的本质:文档是用来保存数据以及关于数据的处理的,每当 MFC SDI/MDI 响应 File ( Open ) / File ( New )的时候都会打开一份文档。文档可以拥有多个视图。文档和视图的关系可以这样理解:文档是被视图观察的对象。视图本质:视图在 Windows 中就是一个窗口,也就是一个可
46、视化的矩形区域。视图是用来表示文档的数据的。但是每个视图必需依附于一个框架( SDI 中是 MainFrame , MDI 是 ChildFrame )。当然你可以自己去 Create 一个视图,并且去显示它。框架的本质:框架实际是也是一个 Windows 窗口。但是在框架上可以放置菜单、工具栏、状态栏等。而视图则放在框架的客户区。因此 MFC 中我们看到的窗口实际上 Frame 和 View 共同作用的结果。在某一时刻,程序中只有一个活动的文档、框架和视图,即当前的文档、框架、视图11。在实际项目开发中用的最多就是 MFC SDI/MDI 各个类之间的互访。表4-1 MFC SDI/MDI 各个类之间的互访访问对象访问位置访问实现应用程序 App任何位置 AfxGetApp(); 在要使用应用程序 App 的文件中加入:extern CAApp theApp ,然后直接使用全局的 theApp 变量。主框架窗口任何位置 AfxGetMainWnd(); AfxGetApp()-m_pMainWnd;视图框架类中GetActiveView();/ 当前的活动视图文档类中GetFirstViewPosition (); /