图形系统应用实习指导书.docx
《图形系统应用实习指导书.docx》由会员分享,可在线阅读,更多相关《图形系统应用实习指导书.docx(70页珍藏版)》请在冰豆网上搜索。
图形系统应用实习指导书
《图形交互系统实习指导书》
实习指导书
学院地质工程与测绘工程学院
系测绘科学与工程系
专业地理信息系统
班级26050801
部门图形交互系统实习队
一、实习的意义与目的
通过为期三周的实习,使学生通过使用国内外常见的Windows下的图形交互软件(如AutoCAD)理解Windows下图形交互程序的界面设计风格、交互基本原理。
学习VC++的使用,通过实习要求学生熟练掌握利用VC++实现Windows下用户界面及图形交互程序的编写。
二、实习内容安排
1.Window图形交互界面的构成及特点。
2.可视化编程工具VC++的学习。
3.利用VC++编写基本的Windows界面。
4.利用VC++编写简单的图形绘制与交互程序。
第一部分:
VC++编程技术要点
本部分将介绍应用VC++的MFC应用程序设计的方法,剖析MFC应用程序框架的组成结构,并介绍辅助程序设计的各个工具的工作基础和使用方法。
第一章、MFC应用程序设计的开发工具简介
本部分对vc++开发环境中的一些辅助开发工具进行简要的介绍。
这些工具包括:
APPWizard、ClassView、ClassWizard、ResourceView、FileView、DataView。
1.1使用MFCAPPWizard
VC++能够用来创建多种类型的MFC应用程序,不同的应用程序具有不同的应用程序框架,VC++系统的设计者们创建了程序框架生成工具AppWizard,用它来建立开发各类MFC应用程序所需要的程序框架。
这样,不论是资深程序员还是初学者,都可以用这个工具生成包含了一些基本功能的框架程序,在此基础上再进行应用程序的开发工作。
1.1.1MFCAppwizald的启动
在vc++工作平台下,运行“File”菜单下的菜单项“New…”,就会进人一个NeW对话框,在对话框顶部有四个可供选择的标签。
如下图所示:
有四个选择标签:
File:
标签下的选项用来选择创建各种类型的文件(如.h,.cpp等);
Project:
标签下的选项用来创建各种应用程序框架;
WorkSpace:
标签下的选项用来创建一个工作区文件;
OtherDocument:
标签下的选项用来创建Exoel、Word等文档。
用鼠标点中“Project”标签,就会进人如上图所示的对话框界面。
在New对话框中可以选择创建的应用程序框架,AppWizard创建的应用程序类型如下表。
这些应用程序框架中,最常用的是开发基于MFC的一般应用程序(MFCAppWizard(exe))。
1.1.2利用MFCAppWizard产生MFC应用程序的步骤
在这一节中,应用MFCAppWizard生成一个叫做Draw的应用程序。
以下是利用AppWizard产生MFC应用程序框架的步骤:
首先,进人vc++的工作平台,运行工作平台上的“File’,菜单下的“New”命令,打开New对话框,然后进行如下步骤的操作:
①选择NeW对话框中的“Project”标签,进人到图2一2所示的对话框界面。
因为目前要生成的是一般MFC程序,所以从列表框中选择MFCAppwizard(exe)选项,在“ProjectName”(项目名称)编辑框中,输人要生成的应用项目的名称Draw,在“Location”编辑框中列出的是这个项目
所在的目录名称。
对所在目录可以进行修改而设置其他目录路径,如果用户输人的路径不存
在,Appwizard会自动进行创建。
如下图所示,在“PrjectName”和“Locate”编辑框中输人Draw和C:
\Draw。
②在(平台)区中只选择“Win32”复选框,清除其他的选项。
③在完成了以上的输人或选择操作之后,单击“oK”按钮,MFCAppWiard会生成该项目目录,并进入到下图所示的MFCAppWiardStep1——6对话框。
在此对话框中,要求用户对生成程序的文档类型进行选择,共有3个选项:
Singleddocument(单文档界面)、Multipledocuments(多文档界面)和Dialog-based(基于对话框的)。
默认的选项为Multipledocuments扭。
本例子中保持默认选项。
在此对话框中,还要对资源文件中使用的语言进行选择,选择“中文〔中国」APPWZCHS.DLLI,选项。
单击Next按钮,就会进人如下图所示的MFCAppWiardStep2of6对话框。
④在如上图所示的对话框中,要求用户对应用程序支持的数据库类型进行选择。
共有4种选择:
None(不支持数据库)、Headerfileonly(仅包含头文件)、Databaseviewwithoutfilesupport(无文件支持的数据库视结构)和Databaseviewwithfilesupport(有文件支持的数据库视结构)。
根据应用程序在开发中要涉及到数据库操作,进行选择单击Next按钮,就会进入如下图所示的MFCAppWiardStep3of6对话框。
⑤在上图所示的MFCAppWiardStep3of6对话框中,要求用户选择支持的OLE类型。
共有5种选择:
None(不支持OLE)、Container(生成OLE容器应用程序)、Mini-Server(生成小型OLE服务器)、Full-Server(生成全OLE服务器应用程序)和BothcontainerandServer。
(生成OLE容器和服务器应用程序)。
在应用程序中,一般不进行与OLE有关的程序功能设计,保持默认选项None。
单击Nexed按钮,进人下图所示的MFCAppWiardStep4of6对话框。
⑥在上图所示的对话框申,要求对生成的应用程序包含的特征进行选择。
具有以下几个可选项:
Dockingtoolbar(具有一个固定的工具条)、Initialstatusbar(具有可初始化的状态条)、Printingandprintpreview(具有打印和打印预览功能)、Context-sensitiveHelp(具有上下文相关帮助功能)、3DControl(3D控件)。
在本例中,选中所有的这些选项。
单击Next按钮,就会进人下图所示的MFCAppWiardStep5of6对话框。
⑦在上图所示的对话框中,用户需要对是否在生成的程序源代码中加人注释进行选择。
在本例中,选择,“Yes,please”(加入注释)选项。
另外有一个选项是选择在产生的应用程序中如何应用MFC,有两种选择:
“AsasharedDLL,(作为共享动态链接库)和“Asastaticallylinkedlibrary”(作为静态链接库)。
选择“AsasharedDLL”选项。
单击Next按钮,就会进入下图所示的MFCAppWiardStep6of6对话框。
在上图所示的对话框中,用户可以选择或修改要创建应用程序的类、文件名称,以及所要继承的基类,一般保留默认参数不变。
在这个对话框中单击“Finish’按钮,就完成了生成新程序项目DRAW的操作过程。
MFCAppWiard将在选定的目录下生成一个应用程序项目DRAW的所有源文件,并在当前开发平台上打开这个程序项目DRAW。
对程序项目进行编译后运行,就会得到如下图的执行界面。
应用程序的执行结果是令人鼓舞的,轻而易举地就产生了一个与常见的windows应用程序。
它包含着一个主菜单,一个工具条和一个状态条等部件。
1.2使用ClassView
ClassView是VC++工作平台上的一个工具,它通过对应用程序的头文件(.h)和实现文件(.cpp)进行处理,从中得到应用程序中所包含的类,并能够实现增加类、增加类的成员函数和变量,以及在头文件(.h)和实现文件(.cpp)中定位各个类、类的成员函数和变量等各种操作。
用yc++开发应用程序时,随着系统功能的增加、代码的增多,系统具有的头文件和实现文件会越来越多,文件也会越来越大,在源代码文件中寻找类和类的成员函数、成员变童的位置将会变的困难而繁琐。
通过ClassView可以使成员函数、变量的定位和增加类、类的成员的工作变得较为容易。
1.2.1启动ClassView
ClassView的启动非常简单,在下图所示的Vc++开发工作界面上的工作区中单击“ClassView”选择标签,就会在工作区中列出当前应用程序项目所包含的类(图2一10),用鼠标单击“+”会打开各子项目(如在一个类边上单击,会列出此类包含的成员函数和变量),单击“一”会关闭打开的子项目。
ClassView能够完成的功能较多,在下面各节对一些常见的操作功能进行介绍。
1.2.2编辑定位
可以利用ClassView的定位功能在源文件中迅速找到需要进行编辑的位置。
在s上图所示的操作界面上,在需要编辑的类或类的成员上双击鼠标左键,就会在文件编辑框内打开包含类的定义或类的成员的源文件,并将编辑位置移动到类或类的成员的定义处或开始处。
也可以在类或类的成员上单击鼠标右键,调出一个快捷菜单,选择运行快捷菜单中的“Gotodifination”(到定义处)或“GotoDeclearation”(到实际实现处)菜单项,同样可以在文件编辑框中指向类或类的成员的定义处或实现代码开始处(对于类来说,只有定义处)。
1.2.3增加类
在上图所示的ClassView工作区中,在最高一级的列表项目上(显示“DrawClass”)单击鼠标右键,调出快捷菜单,在菜单中选择运行“Newclass”菜单项,就会进入下图所示的对话框。
在上图所示的对话框中,在“ClassType”列表框中有3种类型的类供选择MFCClass、GenicClass、FormClass。
其中,MFCClass选项用来选择增加MFC类的派生类;GenicClass选项用来选择增加一般的C++类;FormClass选项用来选择增加几个特殊MFC类的派生类,通过选择FormClass选项可选择增加CDialog、CRecordView、CDaoRecordView、CFormView等类的派生类。
1.2.4增加类的成员
用ClassView,可以用来增加类的成员,这些成员包括成员变量、成员函数,以及重载虚函数等。
以下简介一些主要操作过程。
(1)增加成员变量
在ClassView所示的工作区中,在需要增加成员变量的类上单击鼠标右键,在弹出的快捷菜单中选择运行“AddMembervariable…”菜单项,就会进入下图所示的对话框。
成员变量的增加过程非常简单,在对话框中的“VariableType”编辑框中输人变量的类型(如int,double,CPoint等),在“VariableName”编辑框中输人变量的名称,在“Access”框中通过按钮选择变童的类型,按‘OK”按钮就完成了增加成员变量的操作。
(2)增加成员函数
在ClassView所示的工作区中,在需要增加成员函数的类上单击鼠标右键,在弹出的选择菜单上选择运行“AddMemberFunction…”菜单项,就会进入下图所示的对话框。
成员函数的增加方法与成员变量类似。
不同的是,除了需要给定函数的返回类型、函数名称、函数的类型外,还可以通过选择“Static”或“Visutal”选择框将函数定义成静态函数或虚函数。
增加成员函数操作完毕后,会在类中增加成员函数的定义,在类的实现文件中增加一个空函数。
(3)重载虚函数
如果一个类是由MFC类派生的,那么可以在这个类中重载MFC类中的虚函数。
在ClassVieW工作区中,在MFC派生类上单击鼠标右键,在弹出的快捷菜单中选择运行“AddVirtualFunction…”菜单项,就会进人重载虚函数的对话框。
如下图所示的对话框中列出的是CDrawDoc类(其基类是CDocument)中所能重载的虚函数和已经重载的虚函数的列表。
在左边的列表框中选择要重载的虚函数,点击“AddHandle,(增加)、“AddandEdit”(增加并马上进行编辑)按钮,就可以在当前文档类CDrawDoc中重载这个虚函数。
此功能与Classwizard中的重载虚函数的功能类似。
1.3使用ResourceView
ResourceView及其相应工具AppStudio是vc++对当前应用程序的资源进行可视化管理的工具,利用它可以对程序所用的各种资源(莱单、工具条、对话框、位图、图标、加速键、热键等)进行可视化的管理。
ResourceView的工作基础是资源文件(.rc)、资源ID号定义文件(Resource.h)和一些实际的资源(一些图像文件、图标文件等)。
在上节生成的应用程序Draw中,资源文件draw.rc,资源ID号定义文件是resource.h,目录下的图像、图标文件等是draw.rc需要的一些具体资源。
另外,在Res目录下,有一个draw.rc2文件,这个文件是用来手工定义资源用的,ResourceView工作时并不处理这个文件,所以在这个文件中定义的资源在可视化的编辑界面上并不存在。
而程序进行编译时,这个资源文件中的内容被插人到资源文draw.rc中。
1.3.1ResourceView的调用
在VC++工作平台下单击“ResourceView”标签,就会进入到下图所示的资源管理状态。
1.3.2ResourceView工作分析
本节并不打算讨论对各种资源进行可视编辑的具体操作步骤,而只分析利用ResourceView对资源进行可视化管理时的工作过程。
(1)资源的几个要素
vc++的应用程序中下包含了开发Windows应用程序的各种资源,如菜单、对话框、对话框内的各种控制等等,不论哪一种资源,一般都包含以下几个基本要素:
类别:
即这个资源项属于哪一类资源。
位里和内容:
这一项对于不同的资源是不一样的,主要用来表示资源项的位置、显示内容等。
风格:
此参数表示这个资源具有这类资源的哪些风格,以及具有哪些可选参数。
lD号:
标识资源项的特征号,也就是这个资源的识别号。
在程序运行时,就是通过这个ID号标识这个资源,对资源进行操作,也是通过这个ID号标识资源发出的消息。
对于资源的ID号,需要给它定义一个ID值。
ID值是在文件resource.h中定义的。
各种资源在资源文件中(如应用程序Draw.rc文件)是以文本形式来描述的。
可以在资源文件draw.rc中找到应用程序Draw的菜单资源定义:
对于一个菜单项,MENUITEM注明了资源的类别,引号内是菜单的显示内容,ID_FILE_xxx是莱单项的ID号,以GRAYED是一个可选的菜单的风格。
从draw.rc中可以找到其他资源的定义代码。
对于资源的ID号,需要给它定义一个值。
ID号的值是在文件resource.h中定义的,对于资源文件中每个资源项的ID号,AppStdio自动在文件resource.h中为它分配一个值,从resource.h文件中可以找到对菜单资源ID号IDR_DRAWTYPE的定义:
#defineIDR_DRAWTYPE129
(2)ResourceView工作过程分析
ResourceView及其工具,类似于一个翻译器,它将资源文件中文本描述的资源翻译成可视化的的资源形态,并在可视化状态下修改;修改完毕后,又把资源以文本方式写入到资源文件中。
其工作过程如下:
读入资源:
当打开一个资源文件时(如draw.rc),Resourceview相关的工具AppStdio。
将资源文件中的内容顺序读人并翻译成各种资源,通过ResourceView列出。
在这个翻译过程中,将要进行很多检查,如各种资源的ID号是否定义(从Resource.h中检查),ID号取值是否重复、是否合法,插入到资源文件中的其他实际资源是否存在(如资源中需要一个位图文件,res\toolbar.bmp作为工具条,检查这个位图文件是否存在)等等。
如果投有错误,打开资源文件成功。
编辑资源:
对于装入的资源,可以调用AppStdio在可视化状态下进行编辑。
所谓可视化状态,就是这些资源在系统运行时的实际状态,是一种所见即所得的的编辑形式。
保存资源:
当对资源进行编辑完成后,AppStdio把资源用文本的形式写人资源文件。
对于新增加或改动的资像,将会在资源文件中增加或修改描述这些资源的文本内容。
对新增的ID号,在Recource.h中自动为其定义ID值。
1.4使用FileVlew
FileView是Vc++开发平台上用来管理一个开发项目所包含的各种源文件的工具。
上节用APPWizard开发完成的应用程序Draw,是由多个文件组成的程序包,其中包含大量的头文件(.h文件)、实现文件(.cpp)文件、资源文件(.rc)、定义文件(.def)等。
通过Fileview可以对一个开发项目包含的文件列表进行管理。
这个文件列表指导编译程序对哪些文件进行编译,同时也用来指导ClassView和ClassWizard等对哪些文件进行处理。
在应用程序设计中,有时会发生程序中的类没有在ClassView中列出的情况,原因就是类的头文件没有放到文件列表中(因为头文件在实现文件中被插入,所以只要实现文件在项目中,在程序编译时头文件也就被编译程序处理了,所以即使头文件没有在项目中,但不影响程序的编译)。
1.4.1打开一个程序项目
一个程序项目所包含的文件信息存放在.dsp文件中(应用程序Draw中的draw.dsp文件)。
在VC++中,.dsw文件中存储的是一个工作平台的信息。
因为在一个工作平台上可以有多个程序项目,具体包含哪些程序项目、开发项目间的依赖关系等都存储在dsw文件中(应用程序Draw中的draw.dsp文件)。
打开一个程序项目的操作非常简单,在VC++工作界面下运行File菜单下的“Openworkspace…”就会出现一个对话框,选择.dsw文件或者.dsp文件就可以打开一个程序项目。
在VC++的早期版本,是通过.mak文件来组成程序项目的。
在VC++工作平台上打开早期版本的开发项目时,需要选择中.mak的文件类型。
在Vc++工作平台上,如果要打开的程序项目原来是在较低版本上形成的,在打开操作时,需要进行转换(确认打开操作时的提示对话框),形成现版本所用的.dsp和.dsw文件。
1.4.2FileView相关的操作功能
(1)启动FileView
在打开一个程序项目的情况下,点中VC++工作区中的Fileview标签,就会进入下图所示的FileView操作界面。
(2)在项目中增删文件
可以随时在项目中增加一个文件或将一个文件从项目文件列表中去掉。
增加文件到程序项目中
在程序项目中增加一个文件的方法有多种,现在介绍其中常用的两种:
一种方法是通过运行VC++工作平台上的菜单“Project”下的“Addprojeet…”菜单项。
如果需要加人的是一个已经存在的文件,则运行“AddProject…”菜单项中的“File,’菜单项调出文件选择窗口,选择需增加的文件;如果需要增加的是一个新建文件,则需要运行“AddProject…”菜单的“New”菜单项调出New对话框,创建一个新建文件。
FileView会根据文件的后缀自动将文件增加到对应的列表项目下(如把.cpp类文件放在“SourceFiles”项下,而把.h文件放在“HeaderFiles”项下)。
另一种方法是在上图中的工作区中单击鼠标右键调出快捷菜单来增加一个文件。
如在“drawfiles”项上单击鼠标右键,就会弹出一个快捷菜单,运行快捷菜单中的“AddFileToProject…”菜单项,就可以进行与第一种方法相同的操作。
在一个项目(如SourceFiles)上单击鼠标右键,运行弹出的快捷菜单中的菜单项“AddFiletoFiolder…”,通过弹出的文件选择对话框选择需要加人到当前项下的文件,就会把这个文件增加在当前项目下(单击SourceFile,操作时,会把文件放在SourceFiles项下,而不管其后缀如何)。
从程序项目中侧除文件
从程序项目中删除一个文件很简单,用鼠标在FileView工作区中的文件列表中选择要删除掉的文件,按删除键(Del)就会把这个文件从项目列表中删除。
注意,这个删除只是从项目所包含的文件列表中删除了这个文件,而不是把这个文件从计算机中删除。
(3)在FIleVie四中增加目录项
在FIleView工作区的文件列表中有一些目录项(如SourceFile、HarderFile等),这些相当于管理文件时的目录。
每个目录存储一定后缀的文件,当用“AddFile,toProject…”增加一个文件时,根据文件的后缀自动把文件列在合适的目录项下。
这个目录项也是可以任意创建和删除的,在Fileview工作区的目录项上单击鼠标右键,运行弹出的快捷菜单中的菜单项“NewFolder…”,就会弹出一个如下图的对话框,
在这个对话框的“NameofNewFolder”编辑框中输人目录项的名称,在“Fileextension”编辑框中输人放在这个目录项中的文件的后缀,按“OK”按钮就会在选中的目录下建立一个子目录项。
当再用“AddFilestoprojeet”菜单项在程序项目中增加文件时,Fileview就会把后缀为指定的文件放在这个新增的目录项下。
删除Fileview工作区中的目录项的操作也很简单,只需用鼠标键选中要删除的目录项,按删除键(DEL)就会把这个目录项及目录项下的文件从文件列表中删除(并非实际删除文件)。
1.5使用ClassWizard
MFCClassWizard是vc+十程序设计中一个非常重要的工具。
Windows应用程序是通过消息来控制流程的。
MFCClassWizard生成的应用程序为通过消息设计程序提供了很好的框架。
程序设计者甚至不必知道也不必参与控制消息传递的实际流程。
而只需掌握简单的使用方法就可以达到程序设计的目的。
MFCClassWizard为管理消息处理函数等提供了一个强大的工具。
1.5.1Windows消息
Windows应用程序一般是由消息驱动的(message-driver)。
为处理诸如击鼠标键、窗口移动或改变大小、键盘输人等情况,Windows会向特定的窗口发送消息。
在vc++中,一般的消息处理被包含在MFC中,用户特定的消息由程序设计者自己处理。
应用类CWinApp中的Run()函数从Windows消息队列中获取消息,并在消息循环中把消息发送到适当的窗口。
Windows程序中的消息主要有三种类型:
窗口消息、控制的通知消息和命令消息。
(1)窗口消息
窗口消息包括由WM_开头的消息(除WM_COMMAND消息外),一般由窗口对象或视图对象处理。
窗口消息往往带有参数,它是在窗口创建、改变大小、删除过程中,以及在受到操作(如受鼠标操作)时产生的,如WM_LBUTTONDOWN消息是在窗口中单击鼠标左键时产生的,WM_SIZE消息在窗口大小改变时产生的。
窗口消息是由窗口对象接收并处理的。
窗口对象指的是从CWnd中派生出的类的对象,如从CFrameWnd、CMDIFrameWnd、CMDIChildWnd、CView、CDialog等MFC类或这些类的派生类定义的对象(这些类都是由窗口类CWnd直接或间接派生的)。
(2)控制的通知消息