基于Visual C++技术开法GIS(第二讲11)课件

上传人:我*** 文档编号:145737246 上传时间:2020-09-22 格式:PPT 页数:71 大小:1.04MB
返回 下载 相关 举报
基于Visual C++技术开法GIS(第二讲11)课件_第1页
第1页 / 共71页
基于Visual C++技术开法GIS(第二讲11)课件_第2页
第2页 / 共71页
基于Visual C++技术开法GIS(第二讲11)课件_第3页
第3页 / 共71页
基于Visual C++技术开法GIS(第二讲11)课件_第4页
第4页 / 共71页
基于Visual C++技术开法GIS(第二讲11)课件_第5页
第5页 / 共71页
点击查看更多>>
资源描述

《基于Visual C++技术开法GIS(第二讲11)课件》由会员分享,可在线阅读,更多相关《基于Visual C++技术开法GIS(第二讲11)课件(71页珍藏版)》请在金锄头文库上搜索。

1、基于Visual C+技术开发GIS系统,哈尔滨工业大学计算机科学与技术学院 蔡则苏 2009-03-25,第二章绘图函数的用法,本章主要包括: 建立画笔 建立画刷 绘图函数及其使用方法 填充函数及其使用方法 几个比较复杂的程序实例 本章主要介绍Visual C+图形程序设计所必备的基础知识,包括画笔和画刷的建立、常用线图函数及其在应用程序中的使用方法等。,2.1 单文档应用框架,所谓的单文档(SDI)界面应用程序,是指在应用程序中一次只能打开一个文件处理。打开下一个文件之前,必须先关闭上一个打开的文件,才能执行下一个打开操作。对于涉及文档较少的程序,只容许处理单个文档的程序或执行其它功能 。

2、,创建过程,创建工程。按照前一章创建工程的步骤创建一个工程,类型为SDI,工程名为Eg3_1,其他选项取默认值。 单击“OK”按钮,AppWizard就开始创建应用的子目录、文件和类。 添加自己的代码:,创建过程(续),扩充Eg3_1View.cpp中的OnDraw成员函数: void CEg3_1View:OnDraw(CDC* pDC) CEg3_1Doc* pDoc = GetDocument(); ASSERT_VALID(pDoc); / TODO: add draw code for native data here pDC-TextOut (60,100,Hello,Welcom

3、e to Visual C+ 6.0!); ,创建过程(续),更改应用程序的标题 : 选择工作区中ResourceVies标签,展开Eg3_1 ResourcesString Table,双击String Table,弹出字符串资源表 。 双击IDR_MAINFRAME项,弹出String Properties对话框。 在Caption编辑框中将标题修改为“单文档应用程序nEg3_1”。 编译、链接并运行。,CEg3_1App应用程序运行过程,CWinApp类创建的实例theApp,整个程序有且只有一个,一切由它开始,最后以它结束。 Visual C+所产生的代码首先通过初始化数据段来建立全局

4、变量,以及建立一些MFC内部使用的对象,然后执行CWinApp类的构造函数。,CEg3_1App应用程序运行过程(续),一旦所有静态对象的构造函数都执行完毕,运行时间库就会调用WinMain()函数,该函数初始化MFC应用,并调用CWinApp类的InitInstance()函数。 完成了这些工作后,WinMain()函数调用CWinApp类的Run()函数,通常默认为CWinThread:Run(),用来得到应用程序的消息循环,或称消息队列。,CEg3_1App应用程序运行过程(续),当程序接收到WM_QUIT消息,就意味着程序终止。这时,MFC会调用CWinApp类的ExitInstanc

5、e(),然后是静态对象的析构函数,包括CWinApp对象,然后将控制权交还操作系统。,2.2 多文档应用框架,多文档(MDI)接口应用程序是指一个应用程序可以同时打开多个文件进行处理。 MDI是大多数应用程序采用的形式。Microsoft公司的Word应用软件就是一个典型的多文档应用。,单文档应用程序和多文档应用程序的比较,在MDI程序中许多程序的细节是与SDI程序是相同的。 在MDI程序中使用了CMultiDocTemplate模板,以便程序能够处理多个文档,同时也将视图和文档类连接到该模板及CChildFrame类,CChildFrame类支持出现在主窗口内部的MDI子窗口。,2.3 基于

6、对话框的应用框架,基于对话框的应用程序,是以对话框为形式的应用程序,它对于那些涉及文档较少,主要是交互式操作的应用程序来说比较合适。 基于对话框的应用框架和前面介绍的基于文档的应用框架有很大的区别。,创建过程,在AppWizard的第一步,即MFC AppWizard -Step 1中,选中“Dialog based”单选框按钮。 在第四步,AppWizard会显示出它将帮助用户创建的类及属性。在这个基于对话框的应用中只有两个类被创建。一个是应用类CEg3_3App,另一个是对话框类CEg3_3Dlg。,创建过程(续),修改对话框资源: 在Text properties对话框中,将Captio

7、n框中的“TODO: 在这里设置对话控制。”删除,改成为“Hello,Welcome to Visual C+!”。 编译、链接 、运行。 注意:基于对话框的应用框架和基于文档的应用框架的区别在于实现对话框的第一步是创建一个对话框对象dlg,然后通过调用对话类的成员函数DoModal()来显示对话框。,2.4 程序运行流程分析,Windows的编程模式: Windows程序运行总是由WinMain()函数开始,该函数主要是建立应用程序的主窗口。Windows程序通过操作系统发送的消息来处理用户输入,程序的主窗口中需要包含处理Windows所发送消息的代码。,MFC应用程序的运行过程,MFC应用

8、程序的运行过程(续),MFC的应用程序运行过程如下: 1.应用程序定义一个应用类全局对象。 2.应用类对象的构造函数开始执行。 3.构造函数执行完后,调用初始化函数InitInstance()。 4.在函数InitInstance()中,构造文档模板。 5.构造文档模板时,按照生成一个文档的顺序先产生一个最初的文档、视主框架。 6.函数InitInstance()生成工具条和状态条,以及其它用户需要的工具。 7.函数InitInstance()执行完成后,应用程序处于等待消息的状态。,三种应用程序框架的异同,相同:每个应用程序的应用类都会自动创建一个InitInstance()函数 相异: 单

9、文档应用程序中,应用类的对象由应用框架构造,使用单文档模板类CSingleDocTemplate的对象来构造文档模板。,三种应用程序框架的异同(续),MDI应用程序中,应用类的对象同样也由应用框架构造 ,使用多文档模板类CMulitDocTemplate对象来构造文档模板。 基于对话框的应用程序中,首先在函数中生成一个对话框对象,然后再通过DoModal()函数来调用和显示这个对话框。,2.5 小结,前一部分介绍了MFC的三种基本应用框架,并通过三个简单的“Hello,Welcome to C+ 6.0!”实例来说明这三个应用框架的区别。,2.6画笔,MFC将Windows提供的各种不同类型的

10、设备环境封装在相应的设备环境类中,即设备上下文(device context, DC),并将设备环境的句柄(ODC)包含在C+类中,所有DC类(例如CPaintDC,CClientDC,CWindowDC) 的基类是CDC类。CDC类提供了在显示器、打印机或窗口的客户区上画图的方法。MFC还定义了若干对应于Windows的绘图工具:画笔(CPen)、画刷(CBrush)、调色板(CPalette)等。 我们下面先来介绍画笔和画刷,2.6.1 画笔的属性,画笔通常具有宽度、样式和颜色3种属性。画笔的宽度即所画的线条宽度,是设备单位表示的。默认的画笔宽度是一个像素单位。 画笔的样式确定了所绘制图形

11、的线型,通常有实线、虚线、点线、点划线、双点划线、不可见线和内框线7种样式。这些样式在Windows中都是以PS_为前缀的预定义标识,如下所示: PS_SOLID 实线 PS_DASHDOTDOT 双点划线 PS_DASH 虚线 PS_NULL 不可见线 PS_DOT 点线 PS_INSIDEFRAME 内框线 PS_DASHDOT 点划线,2.6.2 画笔的创建,只有先创建画笔,CDC才能选中画笔进行绘画。画笔有三种构造函数: CPen:CPen() CPen:CPen(int nPenStyle, int nWidth, COLORREF crColor) CPen:CPen(int nP

12、enStyle, int nWidth, const LOGBRUSH pLogBrush, int nStyleCount=0, const DWORD *lpStyle=NULL) 第一种构造函数建立了一个空的画笔对象,必须调用CreatePen()或CreatePenIndirect()初始化画笔。 例如:CPen pen; pen.CreatePen(PS_SOLID,1,RGB(0,0,0XFF) 创建了绿色的并且实线宽度为1的画笔,CPen:CPen(int nPenStyle, int nWidth, COLORREF crColor),第二种构造函数则可以设定画笔的三个属性。

13、nPenStyle设置画笔的样式,取值为:PS_SOLID(实线)、PS_DASH(虚线)、PS_DASHDOT(点划线)、PS_DASHDOTDOT(双点划线)、PS_DOT(点线)、PS_NULL(空笔不画线)。PS_INSIDEFRAME创建一个画笔,能在Windows GDI(如椭圆等形状的矩形外框)中画图;crColor 代表颜色,可以用DWORD表示,如 0X00FF0000表示红色,也可以用RGB(r,g,b)来表示,例如: CPen *pen1=new CPen(PS_SOLID,1,0X000000FF),CPen:CPen(int nPenStyle, int nWidth

14、, const LOGBRUSH pLogBrush, int nStyleCount=0, const DWORD *lpStyle=NULL),第三种构造函数的参数与第二种构造函数的参数很相似,但是有一些的差别:nPenStyle除了能用前面介绍的样式外,还可以与以下的样式合并使用:PS_COSMETIC(建立化妆笔)、PS_ENDCAP_FLAT(线段终点的样式是平的)、PS_ENDCAP_ROUND(线段终点的样式是圆形)、PS_ENDCAP_SQUARE(线段终点的样式是方形)、PS_GEOMETRIC(建立几何笔)、PS_JOIN_BEVEL(线段相接处是以平角相接)、PS_JOI

15、N_MITER(线段相接处是以斜角相接)、PS_JOIN_ROUND(线段相接处是以曲线相接)或PS_USERSTYLE(可以自定义虚线的线段长与线段间距),CPen:CPen(int nPenStyle, int nWidth, const LOGBRUSH pLogBrush, int nStyleCount=0, const DWORD *lpStyle=NULL),如果样式设置为PS_GEOMETRIC,它会参考pLogBrush来建立画笔。NStyleCount是数组lpStyle 的长度,而lpStyle只有在PS_USERSTYLE中才会用到。这个数组的第0个元素是第1个线段的长

16、度,第1元素是第1个线段与第2个线段间隔的长度,其他以此类推。,2.6.3 创建多支画笔,在绘图中,不同的线段往往要求设置成不同的颜色,这时,就需要创建多支画笔进行绘图。设置多支画笔的操作很简单,程序设置如下: CClientDC *pdc=new CClientDC(this); CPen *pen1=new CPen(PS_SOLID,1,0X000000EE); CPen *pen2=new CPen(PS_SOLID,1,0X00005E00); CPen *pen3=new CPen(PS_SOLID,1,0X00EE0000); CPen *pen4=new CPen(PS_SOLID,1,0X0000ff00); CPen *Oldpen=new pdc-SelectObject(pen1);,例1、层次线段图案,设计思路: 按一定的函数规律变化直线起点与终点的坐标,则可绘制出由直线组成的有层次的图案。本程序实例中使用正弦函数和余弦函数。首先通过 使A的值依正弦函数的规律变化其大小,然后再使用 计

展开阅读全文
相关资源
正为您匹配相似的精品文档
相关搜索

最新文档


当前位置:首页 > 办公文档 > PPT模板库 > PPT素材/模板

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号