计算机图形学
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人

1.2 Visual C++工程及工作区

从前面所示的过程可以看出,编写一个应用程序首先要创建一个工程(或项目),同时还要创建工作区。

1.2.1 工程

工程由一组相关的C++源程序、资源文件以及支撑这些文件的类的集合组成,全部在工程名的目录下,主要有以下几类文件:

∗.dsp(Developer Studio Project):工程配置文件,如工程包含哪个文件,编译选项是什么等,编译时是按照.dsp的配置进行的。

∗.dsw(Developer Studio Workspace):工作区文件,用来配置工程文件。它可以指向一个或多个.dsp文件。

∗.clw:ClassWizard信息文件。

∗.opt:工程关于开发环境的参数文件,如工具条位置等信息。

∗.rc:资源文件。位图、菜单之类的资源。

∗.plg:编译信息文件,编译时的error和warning信息文件。

∗.ncb(No Compile Browser):无编译浏览文件。

∗.cpp:源代码文件,按C++语法编译处理。

∗.h:头文件,一般用做声明和全局定义。

1.2.2 工作区

工作区用工作区文件.dsw来描述,工作区文件保存了集成开发环境中应用程序的工程设置信息,一般用打开工作区名的方式打开指定的工程。

创建工程后,通过左边的工作区窗口可看到三个页面,这些页面将一个工程按照一定的逻辑关系分成几个部分。

(1) ClassView(类视图)

单击“ClassView”标签,显示工程中的所有C++类,如图1-10所示。单击类左边的“+”可列出该类的成员变量和成员函数。这些类的定义都在FileView的文件中。

(2) ResourceView(资源视图)

单击“ResourceView”标签,列出工程中的所有资源。单击资源类型左边的“+”可展开文件夹。双击其中的资源可以打开对应的资源编辑器,对资源进行编辑,如图1-11所示。

(3) FileView(文件视图)

单击“FileView”标签,列出工程中的所有文件及隶属关系。单击文件类型左边的“+”可列出该类型的所有文件。双击其中的一个文件即可打开该文件,可对该文件进行编辑,如图1-12所示。

图1-10 类视图

图1-11 资源视图

图1-12 文件视图

1.2.3 关键类简介

图1-10中的几个关键类如下:

1.文档类(Document)

对应图1-10中的CGraphicDoc,其文件名中间的“Graphic”是工程文件名,它的定义在FileView(见图1-12)的Header Files类型文件的GraphicDoc.h中。文档类一般从MFC中类CDocument中派生;如果支持OLE功能,可从ColeDocument 或ColeServerDoc类中派生。由CDocument派生的类主要用于存储数据。CDocument类用于相应数据文件的读取以及存储CView类所需观察和处理的信息。

2.视图类(View)

对应图1-10中的CGraphicView,它的定义在FileView(见图1-12)的Header Files类型文件的Graphic View.h中。视图相当于文档在应用程序中的观察窗口,确定了用户对文档的观察方式和用户编辑文档的方式。对于图形来说视图就好比我们进行绘图工作的画布,对图形的操作都是在视图上进行的。

一般情况下视图类从CView中派生;对于有特殊要求的视图,根据情况不同,还可以从类CScrollView、CEditView、CFormView、CTreeView、CListView或CRichView等派生。

另外,视图类中有一个重要的成员函数——OnDraw()函数。应用程序中,几乎所有“画”的动作都出现在OnDraw()中或由它来引发。该函数必须被重载。重载的OnDraw()函数要完成两件事,即调用相应的文档的函数获取文档数据,调用GDI(图形设备接口)的函数在视图中画出文档数据。

3.主窗口类(Main Frame Window)

对应图1-10中的CMainFrame,它的定义在FileView(见图1-12)的Header Files类型文件的MainFrm.h中。主窗口是Windows应用程序中限定其所有窗口范围的最外边框。应用程序中的所用其他窗口都直接或间接地为主窗口的子窗口,如标准菜单、工具条、状态条等。一个应用程序一般具有主窗口类。SDI应用程序的主窗口类应从CFrameWnd中派生,MIDI程序的主窗口类应从CMDIFrameWnd中派生。

4.应用类(Application)

对应图1-10中的CGraphicApp,它的定义在FileView(见图1-12)的Header Files类型文件的Graphic.h中。一个应用程序有且只有一个应用类的对象,它控制着上述所有的对象。一个应用程序对象就代表一个应用程序,当用户启动应用程序,Windows调用应用程序框架内置的WinMain函数,并且WinMain寻找一个由CWinApp派生的全局构造的应用程序对象,全局对象在应用程序之前构造。

1.2.4 图形设备简介

1.图形设备接口

图形设备接口GDI(Graphic Device Interface)管理Windows应用程序在窗口中的所有绘图操作和与此有关的诸多方面,如图形设备的信息、坐标系和映射模式、绘图的当前状态(画笔、画刷、颜色、字体等)、绘图的具体操作(如画线、画圆等)。

Windows图形设备接口对象类型由MFC类库表示,这些类有一个共同的抽象基类:CGdiObject。Windows图形设备接口对象由CGdiObject派生类的C++对象来表示,这些对象有:

CBitmap:位图对象。

CBrush:画刷。用于表示区域填充的颜色和样式。

CPen:画笔。用于指定线和边框的性质,如颜色、线宽、线型等。

CFont:字体。具有一定大小和风格的一套字符集。

2.设备环境类

CDC是MFC中最重要的类之一,更是绘图应用程序中最重要的类。CDC类提供的成员函数可以用于对设备环境的操作、绘图工具的使用、图形设备接口(GDI)对象的选择等。在使用CDC类对象时,须先构造一个CDC对象,然后才能调用它的成员函数。使用完成后,必须在适当的地方将其删除,在Windows环境中可获得的设备环境的数量是有限的。如果太多的CDC对象没有被删除,计算机的资源将很快地被耗尽,VC++也会在调试窗口中报错。