1.1 第1章 概述
1.1.1 1.1图形学概述
图形从广义上说,就是能够在人的视觉系统中形成视觉印象的客观对象。图形学和图形处理是两门相关的科学,但是它们彼此间又有所不同。图形学着重于如何用计算机来生成图形,而图形处理则着重于图形的变换,压缩,编码和保存等技术。
计算机图形学是Ivan Sutherland于1962年提出的,近年来得到了飞速的发展。个人计算机和工作站上的图形工具比几年前的巨型机上的图形工具还要多,计算机图形学的领域也随之扩展。过去,当人们编出越来越多的图形应用程序后,需要把图形文件存储下来以作日后的处理或显示之用。在缺乏广为接受的标准的情况下,每个应用程序开发者都提出文件格式以支持其应用程序。每个应用程序开发者都提出文件格式以支持其应用程序。在数以百计的应用程序中所使用的格式由几十种之多。例如在著名的图形处理软件——PhotoShop 5.0中用到的图像文件格式、子格式就共有三十多种。简单举几种格式来说:PCX、MacPaint、Tiff、Gif、GEM、IFF/ILBM、Targa、BMP/DIB、WPG、PostScript、Sun、PBM、XBM、JPEG、FITS、DXF、HP-GL、LotusPic、PCL、WMF、EPS、CGM、RIB、FLI/FLC、MPEG、PDF……。
总之,基于图形学的应用程序开发有着广阔的发展前景。它的应用相当广泛,它在经济发展、日常生活中充当着越来越重要的角色。
1.1.2 1.2 VCL基础
1.2.1 简介
VCL是用来编写Windows应用程序的Pascal类集,该类集以层次结构组织起来,其中封装了大部分Windows API函数和Windows控件,它所包含的功能涉及到整个Windows操作系统。VCL不仅为用户提供了Windows图形环境下应用程序的框架,而且还提供了创建应用程序的组件。使用VCL类库和Delphi提供的高度可视的应用程序开发工具,可使应用程序开发变得更简单,极大地缩短开发周期,提高代码的可*性和可重用性。
1.2.2 VCL中类的组织结构及主要的类
VCL同时还是一个应用程序框架,它帮助定义应用程序的结构,以及为应用程序处理多种杂务,事实上,VCL封装了一个程序操作的每一方面。在VCL程序中,程序员很少需要直接调用Windows API函数,而是通过定义VCL类的对象并调运对象的成员函数来实现相应的功能。
VCL类库中类是以层次结构的方式组织起来的,几乎每个子层次结构都是与一具体的Windows实体相对应,一些主要的接口类管理了难以掌握的Windows接口。这些接口包括:窗口类、GDI类、对象链接类和嵌入类(OIE)、文件类、对象I/O类、异常处理类以及集合类等。
VCL库中的类按层次关系可分为如下若干类:
l 根类:CObject
l 应用程序体系结构类CWinApp:属于Application Architechture(应用程序体系结构)。一个VCL项目对应一个CWinApp对象。
l CWnd类及派生类:属于Windows Support部分。我们看到的Windows界面都是由这个类的对象所形成。包括这样几部:
(1) Frame Windows.包括用于生成框架窗口的CframeWnd 及其派生类以及用于生成分割栏窗口的CsplitterWnd.
(2) Views:包括Cview 及其派生类,用于生成视图窗口。
(3) Dialogs:包括Cdialogs及其派生类,用于生成对话框
(4) Control Bars:包括CcontrolBar及其派生类,用于生成状态栏和工具栏。
(5) Property Sheets:包括CproperSheet及其派生类,用于生成属性表。
(6) Controls:包括各种控件类,比如Cedit用于生成编辑框,ClistBox用于生存列表框。
l CDocument及其派生类。和CWinApp属于Application Architectrue范畴。用于提供应用程序数据的存储和加载,常和CView类一起工作,合在一起称为文档/视图结构。
l Flie Services:包括CFlie各类,提供文件服务,这是一种教底层的服务,一般可以用一些高层的服务代替(比如文档的序列化等)。
Graphical Drawing:包括CDC(Class of device context,设备环境类)等类,提供图形绘制功能。当您希望在视图窗口中绘图时,您需要使用该CDC以提供供绘图环境。
l Graphical Drawing Objects:绘图环境,可以提供绘图对象,比如画笔(Cpen),刷子(Cbrush)等来进行绘图。
l Menus:包括Cmenu类,封装了Windows中菜单的数据结构。
l ODBC Database和Database Support: 包括Cdatabase和CdaoDatabase等类,提供数据库服务。
l Internet Services: 包括CInternetSession 等类,提供网络服务。此外,还有一些非CObject类及其派生类,也是必须了解的。比如:
l SimpleValueType:CPoint ,CRect,CSize,CString,CTime,CTimeSpan.各类。
l Internet Server API: 包括ChttpServer等各类,用于提供底层的网络服务。
1.2.3 VCL消息映射及处理
在VCL中,管理消息的方式通常是这样的:当发生某个消息(比如用户移动了鼠标和按下了键盘),该消息进入消息队列,操作系统根据消息提供的信息决定由哪个应用程序来处理,该应用程序依照一定的方式查找应用程序中各个类的消息映射(一组宏,这些宏用来确定某个消息及相应的处理程序的对应关系)找到处理程序,然后由处理程序执行。
VCL程序要处理的消息的种类如下:
l Windows消息。以WM_开头,但WM_COMMAND例外。通常由窗口和视图来处理,这些消息常常带有参数,用于决定处理该消息的方式。
l 由控件和其他子窗口发给父窗口的WM_COMMAND消息。这些消息中会向系统发送一个带EN_CHANGE通知码的WM_COMMAND消息。
l 来自于用户界面对象的WM_COMMAND消息。这些用户界面对象包括菜单、工具栏和快捷键。系统在处理这些用户界面对象的消息和前面有所不同,当这种类型对象接受到某个消息时,它将处理该消息的权利优先提供给其他对象。
1.2.4 创建一个应用程序框架的基本过程:
1. 建立工程VCL APPWizard(exe)。
2. 设置应用程序的设计环境,包括类型、数据库支持、复合文档(OLE支
持)、外观、风格、VCL库文件的方式。
3. 编译并执行该应用程序。
这样,就生成了一个可执行的应用程序框架,让我们来看看在客户区画一条直线的过程:
1. 建立工程 CreateLine
2. 应用程序类型设置为SDI,其他的设置默认。
3. 打开工作区,我们打开FileView在Source File 中CreateLineView.cpp文件中的CreateLineView::OnDraw(CDC* pDC)中加入代码:
pDC->MoveTo(0,0); pDC->LineTo(500,400);
4.编译并执行该应用程序。
.................