基于Opengl的屏幕对象拾取 毕业论文(3)
分述如下:
(1)对Win32应用程序编程接口的封装; (2)对应用程序概念的封装; (3)对COM/OLE特性的封装; (4)对ODBC功能的封装。 2.4.2继承
首先,MFC抽象出众多类的共同特性,设计出一些基类作为实现其他类的基础。这些类中,最重要的类是CObject和CCmdTarget。CObject是MFC的根类,绝大多数MFC类是其派生的,包括CCmdTarget。CObject 实现了一些重要的特性,包括动态类信息、动态创建、对象序列化、对程序调试的支持,等等。所有从CObject派生的类都将具备或者可以具备CObject所拥有的特性。CCmdTarget通过封装一些属性和方法,提供了消息处理的架构。MFC中,任何可以处理消息的类都从CCmdTarget派生。
针对每种不同的对象,MFC都设计了一组类对这些对象进行封装,每一组类都有一个基类,从基类派生出众多更具体的类。这些对象包括以下种类:窗口对象,基类是CWnd;应用程序对象,基类是CwinThread;文档对象,基类是Cdocument,等等。 2.4.3虚拟函数和动态约束
MFC以“C++”为基础,自然支持虚拟函数和动态约束。但是作为一个编程框架,有一个问题必须解决:如果仅仅通过虚拟函数来支持动态约束,必然导致虚拟函数表过于臃肿,消耗内存,效率低下。例如,CWnd封装 Windows窗口对象时,每一条Windows消息对应一个成员函数,这些成员函数为派生类所继承。如果这些函数都设计成虚拟函数,由于数量太多,实现起来不现实。于是,MFC建立了消息映射机制,以一种富有效率、便于使用的手段解决消息处理函数的动态约束问题。 2.5 应用程序的构成
图2解释了该应用程序的结构与对象,箭头表示信息流向。
图 2 应用程序的结构
从CWinApp、CDocument、CView、CMDIFrameWnd、CMDIChildWnd类对应地派生出CTApp、CTDoc、CTView、CMainFrame、CChildFrame五个类,这五个类的实例分别是应用程序对象、文档对象、视对象、主框架窗口对象和文档边框窗口对象。主框架窗口包含了视窗口、工具条和状态栏。对这些
8
类或者对象解释如下:
(1)应用程序(CWinApp)
应用程序类派生于CWinApp。基于框架的应用程序必须有且只有一个应用程序对象,它负责应用程序的初始化、运行和结束。 (2)边框窗口(CMDIFrameWnd)
如果是SDI应用程序,从CFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含视窗口;如果是MDI应用程序,从CMDIFrameWnd类派生边框窗口类,边框窗口的客户子窗口(MDIClient)直接包含文档边框窗口。如果要支持工具条、状态栏,则派生的边框窗口类还要添加CToolBar和CStatusBar类型的成员变量,以及在一个OnCreate消息处理函数中初始化这两个控制窗口。
边框窗口用来管理文档边框窗口、视窗口、工具条、菜单、加速键等,协调半模式状态(如上下文的帮助(SHIFT+F1模式)和打印预览)。 (3)文档边框窗口(CMDIChildWnd)
文档边框窗口类从CMDIChildWnd类派生,MDI应用程序使用文档边框窗口来包含视窗口。 (4)文档(CDocument)
文档类从CDocument类派生,用来管理数据,数据的变化、存取都是通过文档实现的。视窗口通过文档对象来访问和更新数据。 (5)视(CView)
视类从CView或它的派生类派生。视和文档联系在一起,在文档和用户之间起中介作用,即视在屏幕上显示文档的内容,并把用户输入转换成对文档的操作。
用图的形式可直观地表示所涉及的MFC类的继承或者派生关系,如下:
图 3 MFC的层次
2.6 基于OpenGL+MFC的三维模拟的编程环境配置
用MFC调用OpenGL函数来进行三维模拟的编程环境配置: (一)创建MFC项目
(1) 创建项目文件:选择File/New 菜单选项,建立一个名为MyTest 的单文档 (SDI) 应用程序; (二)配置OpenGL开发环境
(1)将91.h,glu.h,glaux.h和glut.h拷贝到???(即盘符+路径)\Microsoft Visual Studio\VC98\Include\GL目录中; (2)将opengl32.1ib,glu32.1ib,glaux.1ib和glut32.1ib拷贝到???(即盘符+路径)\Microsoft
9
Visual Studio\Vc98\Lib目录中;
(3)将opengl32.dll,glu.dll,glu32.dll,glut.dll,glut32.dll文件拷贝到操作系统安装目录C:\WINDOWS\system32目录下;
(4)选择Project/Setting 菜单选项。在Link栏的Lib输入域中添加openg132.lib、glu32.lib,若需使用OpenGL的辅助库函数,则还需添加glaux.lib。 到此,基于OpenGL+MFC的开发环境就建立好。 (三)初始化OpenGL 具体编程步骤:
第一步:修改窗口风格设置。 需要在函数CGLView::PreCreateWindow中增加对Windows窗口风格的设置,以防止在窗口重叠时把图形绘制到子窗口和兄弟窗口。实现代码如下:cs.style l=WS_CLIPCHILDREN WS CLIPSIBLINGS; 第二步:设置像素格式。
首先需要在视图类CGLView中添加一个成员函数,函数原型如下:BOOL CGLView::SetupPixelFormat(CDC*pDC);设置像素格式并向视图类CGLView中添加两个成员变量:
CDC* m_pDC;OpenGL设备场境HGLRC m_hRC;OpenGL渲染场境在Windows中,使用结构PIXELFO腿ATDEscRIPTOR来设置像素格式,并提供ChoosePixelFormat()函数来选择最为匹配的像素格式以及SetPixelFormat()函数来为设备场境设置像素格式。 设置像素格式的步骤如下:
a.填写结构PIXELFORMATDESCRIPTOR,像素格式是用这个结构来描述的。
b.调用函数ChoosePixelFormat(),将填写好的像素格式结构传递给该函数,函数ChoosePixelFormat()返回一个整型的序号。这个序号标识一个当前设备场境中所能提供的,且与所要求的像素格式最为匹配的像素格式。
c.将这个返回的像素格式序号传递给函数SetPixelFormat(),使之设置成为当前设备场境的像素格式。
第三步:创建渲染场境。
用wglreatecontext()函数来创建OpenGL的一个渲染场境;用wglMakeCurrent()函数使给定的渲染场境设置成为当前调用线程的渲染场境,而线程中随后调用的OpenGL命令都将通过与该渲染场境相关联的设备场境来实现窗口的场景绘制。具体实现代码如下: HDC m hDC;
HGLRC nl hglRC:
m_hglRC=wglCreateContext(m_hDC);创建一个渲染场境
wglMakecurrent(m_hDC,m hglRC);使成为当前调用线程的渲染场境 第四步:添加消息处理函数。
利用MFC ClassWizard为CGLView类添加消息:帐_CREATE、wM_DESTROY、m,t_SIZE和删_TIMER的响应函数,消息处理函数名依次为:OnCreate()、onDestroy()、OnSize()和OnTimer()。 A.CGLView::OnCreate()函数
该函数完成的功能是:在视图窗口创建完成后,进行OpenGLWindows的初始化工作。 (四)清理工作 CGLView::OnDestroy()函数
该函数完成的功能是:在视图窗口被释放时,用于清除当前的渲染场境,并释放设备场境。具体实现代码如下:
wglMakeCurrent(NULL,NULL);
wglDeleteContext(m__hglRC);清除渲染场境: ReleaseDC(m_hWnd,m_hDC);释放设备场境
10
C.CGLView::OnSize()函数 D.CGLView::OnTimer()函数
该函数完成的功能是:通过定时器每隔一定时间的消息驱动,来实现动态的场景更新。
11
3 拾取技术
< …… 此处隐藏:3358字,全部文档内容请下载后查看。喜欢就下载吧 ……相关推荐:
- [综合文档]应答器设备技术规范(征求意见稿)A1
- [综合文档]教师 2012年高考政治试题按考点分类汇
- [综合文档]保险公司的总经理助理竞职演说
- [综合文档]卫生应急大练兵大比武活动考试--题库(
- [综合文档]徐州经济技术开发区总体规划环境影响报
- [综合文档]汉语拼音表(带声调)
- [综合文档]二年级 上 思维训练( 1~18)
- [综合文档]特色学校五年发展规划
- [综合文档]机床经常出现报警“X1轴定位监控”
- [综合文档]《电子技术基础》21.§5—2、3、4 习题
- [综合文档]浙江省深化普通高中课程改革
- [综合文档]CRISP原理 - 图文
- [综合文档]2017年电大社会调查研究与方法形考答案
- [综合文档]浅析建筑施工安全毕业论文
- [综合文档]《回忆我的母亲》名师教案
- [综合文档]装饰装修工程监理规划
- [综合文档]三下乡心得体会-文艺
- [综合文档]柱计算长度系数 - 图文
- [综合文档]全流程思考,提高燃电系统热电转换率--
- [综合文档]2018年嘉定区中考物理一模含答案
- 433M车库门滚动码遥控器
- 8、架空线路施工规范
- 大学四年声乐学习的体会
- 新北师大版五年级数学上册《轴对称再认
- 部编版五年级上册语文第六单元小结复习
- 小学六年级英语形容词用法
- 第2课 抗美援朝保家卫国 课件01(岳麓版
- 2015年天津大学运筹学基础考研真题,考
- 微机计算机控制技术课后于海生(第2版)
- 安全教育实践活动
- Delphi程序设计教程_第1章_Delphi概述
- 第八讲 工业革命与启蒙运动
- 《中华人民共和国药典》2005年版二部勘
- 科粤版九年级化学2.3构成物质的微粒(1)
- 西师大版数学三年级下册《长方形、正方
- ch6_冒泡排序演示
- 第4章 冲裁模具设计
- 浙江中小民营企业员工流失论文[终稿]
- 再议有线数字电视市场营运模式
- 昆明供水工程监理大纲




