交互式二维图形绘制软件设计.doc

上传人:精*** 文档编号:829774 上传时间:2023-09-06 格式:DOC 页数:51 大小:712.48KB
下载 相关 举报
交互式二维图形绘制软件设计.doc_第1页
第1页 / 共51页
交互式二维图形绘制软件设计.doc_第2页
第2页 / 共51页
交互式二维图形绘制软件设计.doc_第3页
第3页 / 共51页
交互式二维图形绘制软件设计.doc_第4页
第4页 / 共51页
交互式二维图形绘制软件设计.doc_第5页
第5页 / 共51页
点击查看更多>>
资源描述

1、 目 录摘 要5关键字5Abstract5Key Words6前 言71. 概述81.1 图形学的发展82. 设计原理92.1 类与数据封装92.2 派生类与继承性102.3 虚函数与多态性122.4 数据存储与屏幕重绘123. 设计思路134. 设计过程与步骤154.1 建立绘图程序框架154.2 图形类的定义164.2.1 图形基类CShape164.2.2 直线类CLine174.2.3 矩形类CRectangle194.2.4 圆类CCircle214.2.5 椭圆类CEllipse244.2.6 多边形类CPolygon264.3 增加绘图菜单284.3.1 增加菜单资源284.3.

2、2 进行菜单命令的消息映射304.3.3 编写菜单命令的消息处理函数代码304.4 在屏幕上画图354.4.1 用ClassWizard映射鼠标消息354.4.2 在视图类中添加数据成员364.4.3 添加消息处理函数代码374.4.4 定制视图窗口434.5 在文档类中保存图形444.5.1 保存图形对象444.5.2 修改视图类的OnDraw成员函数454.5.3 删除文档数据454.5.4 实现文件保存和打开464.6 图形程序的编译运行47总结49参考文献50致 谢51附 录52 交互式二维图形绘制软件设计 胡兴浩(湖南城市学院计算机科学系2012届计算机科学与技术专业,湖南 益阳,4

3、13000)摘 要:随着计算机硬件功能的不断提高、系统软件的不断完善,计算机图形学已广泛应用于各个相关领域,并发挥愈来愈大的作用。其中,利用计算机对数字化图形进行编辑处理的方法,也使电脑美术逐渐发展成为一种新兴的艺术形式。 在计算机中,图画有两种类型,即矢量图和位图。位图较矢量图更适合于表现那些色彩丰富、有明暗变化和大量细节的图片,因此在数码拍照、彩色印刷等方面有着广泛的应用。简单地说,计算机绘图学是研究如何利用计算机来处理图形的学科,计算机毕业论文,它涉及到多门学科的知识,例如工程制图学基础、数学基础、程序设计方法学和计算机科学及其它学科的专业知识。这些知识间的相互渗透,会给我们日常生活带来

4、很多方便。关键字:数字化图形编辑处理;矢量图;位图2 d graphics software interactive design HuXingHao (hunan city university computer science 2012 of computer science and technology professionals, hunan yiyang, 413000) Abstract: along with the computer hardware function unceasing enhancement, and the continuous improvement o

5、f the system software, computer graphics has been widely used in various fields, and play more and bigger role. Among them, the use of the digital computer graphics editing processing methods, also make the computer art gradually developed into a new art form. In computers, pictures have two types,

6、namely the vector diagram and the bitmap. The bitmap is vector diagram is more suitable for the color is rich, have performance change and a lot of the detail of the light and shade pictures, so in digital photo taking, color printing, etc in a wide range of applications. Say simply, computer graphi

7、cs to learn how to use a computer is to study to the discipline of the graphics processing, computer graduation thesis, it involves the multi-discipline knowledge, such as engineering cartography foundation, the mathematical foundation, program design methodology and computer science and other disci

8、plines professional knowledge. These knowledge of mutual osmosis, will give us the daily life brings a lot of convenience. Key Words: digital graphics editor processing; Vector diagram; bitmap 前 言:近年来,随着计算机图形软硬件技术的日益进步和应用需求的不断增长,计算机图形学的研究和应用呈现出以下几个特点: (1)模型复杂度急剧增大。随着三维扫描、计算机辅助设计和科学仿真等技术的提高,几何建模变得更加方

9、便,模型的几何复杂度也越来越大,包含上千万甚至数十亿几何图元的模型变得十分普遍。这些模型数据精度高,能保留原始模型的细节特征,对机械制造、生命科学、军事仿真、建筑规划、文物保护、影视游戏等诸多领域具有重要价值。 (2)场景对象更加复杂。随着几何、材质、物理建模技术以及运动捕获技术的提高,虚拟场景中对象类型越来越多,对象属性也变得更加复杂。对象状态可能为静态,也可能由用户控制或程序驱动而动态变化;对象表示可能采用几何表达方式,也可能采用基于图像的表达方式,甚至两者相结合的表达方式;对象属性除了包含几何和材质属性外,也可能包含物理属性,以及交互和智能等高级属性。1 概述1.1 图形学的发展1963

10、年,伊凡苏泽兰(Ivan Sutherland)在麻省理工学院发表了名为画板的博士论文, 它标志着计算机图形学的正式诞生。至今已有三十多年的历史。此前的计算机主要是符号处理系统,自从有了计算机图形学,计算机可以部分地表现人的右脑功能了,所以计算机图形学的建立具有重要的意义。 CAD 的发展也显现出智能化的趋势,就目前流行的大多数CAD 软件来看,主要功能是支持产品的后续阶段一一工程图的绘制和输出,产品设计功能相对薄弱, 利用AutoCAD 最常用的功能还是交互式绘图,如果要想进行产品设计, 最基本的是要其中的AutoLisp语言编写程序,有时还要用其他高级语言协助编写,很不方便。而新一代的智能

11、CAD 系统可以实现从概念设计到结构设计的全过程。例如,德国西门子公司开发的Sigraph Design软件可以实现如下功能:(1) 从一开始就可以用计算机设计草图,不必耗时费力的输入精确的坐标点,能随心所欲的修改,一旦结构确定,给出正确的尺寸即得到满意的图纸;(2) 这个软件中具有关系数据结构, 当你改变图纸的局部,相关部分自动变化,在一个视图上的修改,其他视图自动修改,甚至改变一个零件图,相关的其它零件图以及装配图的相关部分自动修改:(3) 在各个专业领域中,有一些常用件和标准件, 因此,希望有一个参数化图库。而Sigraph不用编程只需画一遍图就能建成自己的图库;(4)Sigraph还可

12、以实现产品设计的动态模拟用于观察设计的装置在实际运行中是否合理等等。智能CAD的另一个领域是工程图纸的自动输入与智能识别,随着CAD技术的迅速推广应用,各个工厂、设计院都需将成千上万张长期积累下来的设计图纸快速而准确输入计算机,作为新产品开发的技术资料。多年来,CAD 中普遍采用的图形输入方法是图形数字化仪交互输入和鼠标加键盘的交互输入方法很难适应工程界大量图纸输入的迫切需要。因此, 基于光电扫描仪的图纸自动输入方法已成为国内外CAD工作者的努力探索的新课题。但由于工程图的智能识别涉及到计算机的硬件、计算机图形学、模式识别及人工智能等高新技术内容,使得研究工作的难点较大。工程图的自动输入与智能

13、识别是两个密不可分的过程,用扫描仪将手绘图纸输入到计算机后,形成的是点阵图象。 CAD 中只能对矢量图形进行编辑, 这就要求将点阵图象转化成矢量图形。而这些工作都让计算机自动完成。这就带来了许多的问题。如(1) 图象的智能识别;(2) 字符的提取与识别;(3) 图形拓扑结构的建立与图形的理解;(4)实用化的后处理方法等等。2 设计原理面向对象的程序设计是现在最外流行的程序设计方法。面向对象的方法模仿人们建立现实世界模型的方法,认为客观世界是由各种各样的对象组成的,每个对象都有各自的内部状态和运动规律,不同对象之间的相互作用和联系就构成了各种各样的系统。利用人们对事物分类和抽象的自然倾向,引进了

14、类的概念,具有封装性、继承性和多态性等特点。面向对象的程序设计吸取了传统的结构化程序设计的优点,采用数据抽象和信息隐藏技术、将数据与操作封装在一起,用类来抽象代表现实的实体,用类之间的继承关系来代表设计的抽象过程,将问题求解看作是一个非类演绎过程。2.1 类与数据封装在C+中,类是指由用户定义的一种抽象数据类型,将一组具有相关性的数据成员结合在一起,要使用类中所包含的数据时,必须通过有该类所提供的成员函数来存取。数据封装是指将类中的数据成员以其可被使用或不可被使用的方式进行分类,即有条件地限制类中部分或全部的数据成员被使用,在定义数据成员时在其前面冠以private、protected或pub

15、lic,分别表示私有的、保护的和公有的。因此,类是实现数据封装的一个有力方法,类的特性是实现了数据封装或数据抽象。在本设计中,可以把各种图形形状,如直线、矩形、圆、曲线、多边形等定义为各种各样的图形类,将图的具体绘制、存储操作和属性设置定义为图形类的public成员函数,这样就实现了类与数据封装。例如,直线类可以定义为:class Clineprivate:COLORREF m_color;/直线的颜色int m_lineWidth, m_lineStyle;/直线的线宽和直线的线型POINT m_beginPoint, m_endPoint;/直线的起点和终点public:COLORREF

16、getColor();/返回直线的颜色void setColor(COLORREF color);/设置直线的颜色int getLineStyle();/返回直线的线型void setLingStyle(UINT style);/设置直线的线型int getLineWidth();/返回直线的线宽void setLineWidth(int width);/设置直线的线宽POINT getBeginPoint();/返回直线的起点POINT getEndPoint();/返回直线的终点void Draw(CDC *pDC);/直线的具体绘制void Serialize(CArchive &ar)

17、;;2.2 派生类与继承性在C+中,派生类和继承性是指用户可以利用已有的类(称为基类或父类)定义出新的类(派生类或子类),派生类中不但拥有基类中的全部或部分数据成员与成员函数,而且还可以定义新的数据成员与成员函数。在本设计中,要绘制的图形形状很多,如直线、矩形、圆、曲线、多边形等。虽然图形的形状差别很大,其数据成员和成员函数也有许多不同之处,但是如果从抽象的角度出发,它们有些数据成员和成员函数是相同的,如颜色、线型、线宽属性以及设置或获取这些属性的成员函数,因此可以把这些共同点定义为一个基类CShape,然后从CShape类派生出直线类、矩形类、圆类、曲线类、多边形类等,这样,每个派生类都继承

18、有这些共同点,又可以定义自己独特的数据成员和成员函数,程序结构更加简练合理。CShape类的定义如下:class CShapeprotected:COLORREF m_color;/颜色int m_lineWidth, m_lineStyle;/线宽和线型public:virtual COLORREF getColor();/返回颜色virtual void setColor(COLORREF color);/设置颜色 virtual int getLineStyle();/返回线型virtual int setLineStyle(int style);/设置线型virtual int get

19、LineWidth();/返回线宽virtual void setLineWidth(int width);/设置线宽virtual void Draw(CDC *pDC);/绘图virtual void Serialize(Carchive &ar);/存储操作;而CLine类派生于CShape类,定义如下:class CLine: public CShapeprivate:POINT m_beginPoint, m_endPoint;/直线的起点和终点public:POINT getBeginPoint();/返回直线的起点POINT getEndPoint();/返回直线的终点void

20、Draw(CDC *pDC);/直线的具体绘制void Serialize(Carchive &ar);/直线的具体存储操作;2.3 虚函数与多态性在面向对象中,多态性是指一个名字有多种含义,或相同界面有多种实现。在继承体系中,如果在派生类中对所继承的成员函数重新定义其功能,该函数应在基类中被定义为虚函数,在成员函数定义时在其前面加上关键字virtual。C+系统能自动判别应该调用哪一个类对象的成员函数。因此,虚函数是一种单界面多实现版本的方法,即函数名、返回类型、参数类型和个数及顺序完全相同,但函数体内容可以完全不同。在本设计中,可以把抽象的图形基类CShape的绘图操作Draw定义为虚函数

21、,直线、矩形、圆、曲线、多边形等作为CShape的派生类,把它们的具体绘图操作定义在各自类中,保留其函数原型(函数名、返回值类型、参数个数及类型、顺序)都不变,然后用指向基类CShape的指针来调用Draw函数,就可以实现虚函数与多态性,即同样的调用语句因指针所指向的对象不同而画出不同的图像。如下所示:CShape *pShape;/定义指向基类CShape的指针pShapeCLine line;/定义一个直线类的对象linepShape=&line;/将line的地址赋给pShapepShape-Draw(pDC);/绘制直线Crectangle rect;/定义一个矩形类的对象rectpS

22、hape=▭/将CRectangle的地址赋给pShapepShape-Draw(pDC);/绘制矩形CCircle circle ;/定义一个圆对象circlepShape=&circle;/将circle的地址赋给pShapepShape-Draw(pDC);/绘制圆可见,同样的语句“pShape-Draw(pDC);”,却能绘制出不同的图形,这就是虚函数与多态性的功能特点。2.4 数据存储与屏幕重绘绘图程序Draw要求能用鼠标在屏幕上绘制直线、贝济埃曲线、圆、椭圆、矩形、多边形等基本二维图形,并提供相应的文件保存和屏幕重绘功能。二维图形包括许多种类型,用于表征这些二维图形对象的

23、数据是不同的,它们都有颜色、线型和线宽3个属性数据,但它们的几何数据不同,点用一个坐标点数据表示,直线、圆、椭圆和矩形用两个坐标点数据表示,圆角矩形用两个坐标点数据和两个整型数据来表示,圆弧或椭圆弧、饼图或扇形用4个坐标点数据表示,贝济埃曲线用4个以上的坐标点数据表示,而多边形所需的坐标点数据个数是任意的。另外,对于封闭图形,还可以有填充与不填充选择,若填充,还可以选择颜色、影线和图案3种模式之一。因此,如何实现对这些具有不同数据类型和个数图形对象的保存,以及如何根据保存的数据区别不同图形对象并进行屏幕重绘,是本设计要解决的关键问题。从MFC的文档/视图结构可知,应用程序的数据保存专门由文档类

24、的Serialize函数负责具体完成,应用程序的数据显示或屏幕重绘专门由视图类的OnDraw函数负责具体完成。如果在二维图形基类CShape定义中把负责数据保存的成员函数Serialize和负责图形绘制的成员函数Drawing说明为虚函数,在派生类即具体的二维图形类定义中只对Serialize和Drawing的函数内容重新定义,保留其函数名、返回值类型和参数(包括类型和个数)不变,用一个指向基类CShape的指针访问虚函数Serialize和Drawing,就可以实现画图程序具有不同数据类型和个数的二维图形对象的保存,以及根据保存的数据区别不同图形对象在屏幕上重新绘制出来。在MFC类库中,集合

25、类是专门用于数据保存的。集合类又分为数组类、链表类和映射类(也称数据字典类)。它们都能适用于各种数据类型,如BYTE、WORD、int、float、String、对象地址或对象指针等。从前面的分析可以看出,在画图程序中需要保存的数据是各二维图形对象的地址,因此可以选用数组类的CObArray/CPtrArray或链表类的CObList/CPtrList。在MFC中,数组是采用动态数组,链表是采用双向链表。数组和链表对存取数据的操作各有优缺点。在本设计中,可以简单地选用CObArray来存放二维图形对象的地址。3 设计思路首先定义一个二维图形的基类CShape,它包含颜色、线型和线宽3个共有的数

26、据成员,定义串行化Serialize和绘图Drawing两个虚函数,然后从CShape类派生上述各二维图形类:CLine、CCircle、CEllipse、CRectangle、CBezier和CPolygon等,在每一个二维图形类中定义自己的几何数据,定义构造函数以便生产各自的图形对象,重载Serialize和Drawing函数,以实现各自不同的数据序列化和屏幕重绘。其次,在文档类中定义一个可以保存各二维图形对象地址的CObArray数组,并定义3个操作该CObArray数组的文档类成员函数AddShape、GetShape、GetShapeNumber。视图类是使用这些函数的重要用户。在文

27、档类的Serialize函数中简单地调用CObArray.Serialize函数,而CObArray的Serialize函数又依据所存放的对象指针类型调用相应类对象的Serialize函数,完成实际的数据读写操作,从而实现了二维图形对象不同数据类型和个数的序列化。再次,在用鼠标进行屏幕绘图的鼠标消息处理函数代码中,在OnLButtonUp函数内,对不同的二维图形对象,分别调用各自的构造函数生成二维图形对象,再把该二维图形对象地址用AddShape函数保存在CObArray数组中,以矩形为例,如下所示:if(CurrentDraw= =DRAW_RECTANGLE)pShape=new CRec

28、tangle(m_pOrigin, point, m_pWidth, m_pStyle, m_pColor); /其他二维对象的相应语句段pDoc-AddShape(pShape);其中,pDoc为指向文档的指针;m_pWidth、m_pStyle和m_pColor为视图类的数据成员,分别代表二维图形的线宽、线型和颜色。最后,在OnDraw成员函数中定义一个基类CShape的指针变量pShape,采用循环方法遍历CObArray数组中的所有元素,在for循环内把调用GetShape函数获得的二维图形对象的地址赋给pShape,用pShape调用虚函数Drawing,就可以实现虚函数的多态性,即

29、相同的pShape-Drawing(pDC)函数调用语句,由于pShape所指向的对象不同,实现了调用不同Drawing函数体内容的目的。从而在屏幕上绘出不同的二维图形。实现不同二维图形对象的数据保存和屏幕重绘的过程可以概括为:在视图类中利用鼠标消息处理函数用鼠标绘出二维图形,获得数据;调用各自的构造函数生成二维图形对象,调用AddShape函数把二维图形对象的地址保存在CObArray数组中;在OnDraw函数中,调用GetShape函数从CObArray数组中获得二维图形对象的地址,并赋给基类的指针变量pShape,用pShape调用Drawing虚函数,实现了不同二维图形对象的屏幕重绘;

30、由于CObArray数组本身具有数据序列化功能,因此在文档类的Serialize函数中只需加入对CObArray的Serialize函数的两次调用,即可实现不同图形对象的保存。4 设计过程与步骤4.1 建立绘图程序框架本设计的第一步是使用MFC AppWizard来建立绘图程序的基本框架,步骤为:(1)从File菜单选择New菜单项,弹出New对话框。(2)选择Projects选项卡,从项目类型表框中选择MFC AppWizard(exe),在Project name文本框中输入绘图程序的名字,这里设定为Draw,其他采用默认值。(3)单击OK按钮,弹出MFC AppWizard-Step 1

31、对话框,选中Single document单选按钮和“中文中国”选项,表示要生成以中文为用户界面的单文档(SDI)绘图程序。(4)单击Next按钮,在图2.4所示的MFC AppWizard-Step 6对话框中,单击CDrawView,在Base class的下拉列表框中选择CScrollView,使视图窗口具有滚动功能。(5)单击Finish按钮,表示使用随后的各项默认设置,再单击OK按钮,MFC AppWizard自动生成绘图程序的各项源文件。为了使绘图区(视图客户区)出现水平和垂直滚动条,必须知道图形的总尺寸。为此,需要修改视图类的OnInitiaUpdate函数的内容,将原来的语句:

32、sizeTotal.cx=sizeTotal.cy=100;修改为:sizeTotal.cx=640; sizeTotal.cy=480;其他内容保留不变。AppWizard自动生成了完整的应用程序的基本框架,可以立即选择Build菜单中的Execute Draw.exe菜单项,Visual C+首先进行编译和链接,然后运行该应用程序,可以看到该程序是一个标准的Win32应用程序,它包含有标题、菜单栏、工具栏和状态栏,许多命令都可以操作了。当然,因为还没有给这个程序添加任何自己的代码,所以它还不能做出任何有实际意义的操作。4.2 图形类的定义按照前面分析的设计思路,要定义一个二维图形的基类CS

33、hape,它包含颜色、线型和线宽3个共有的数据成员,定义串行化Serialize和绘图Drawing两个虚函数,然后从CShape类派生各类二维图形类:CLine、CBezier、CRect、CEllipse和CPolygon,在每一个二维图形类中定义自己的几何数据,定义构造函数以便生成各自的图像对象,重载Serialize和Drawing函数,以实现各自不同的数据序列化和屏幕重绘。为了把新定义的图形类单独存放在一个头文件中,在Draw项目已打开的情况下,选择Project Add To Project New命令,在随之弹出的New对话框的Files选项卡中,选择C/C+ Header Fi

34、le,在File文本框中输入新类CShape的头文件名shape,最后单击OK按钮即可。Visual C+关闭New对话框,并在用户工作区中打开一个空白窗口,让用户进行新类的定义。重复上述步骤,但在New对话框的Files选项卡中,选择C+ Source File,以便生成一个空白的实现文件。然后将下面6个类的定义代码放到shape.h文件中,把它们的实现代码放到shape.cpp文件中,并在shape.cpp文件的开头加入下列两行:#include “stdafx.h”#include “shape.h”最后在DrawDoc.h文件开头加入对shape.h的包含语句:#include “sh

35、ape.h”4.2.1 图形基类CShape1. CShape定义代码class CShape:public CObjectprotected:COLORREF m_pColor;int m_pWidth, m_pStyle;CShape()DECLARE_SERIAL(CShape)public:virtual void Drawing(CDC *pDC)virtual void Serialize(CArchive &ar);2.CShape类实现代码IMPLEMENT_SERIAL(CShape, CObject, 1)void CShape:Serialize(CArchive &ar

36、)if(ar.IsStoring()arm_pColorm_pWidthm_pColorm_pWidthm_pStyle;4.2.2 直线类CLine1. CLine类定义代码class CLine:public CShapeprotected:POINT m_pStart, m_pEnd;CLine()DECLARE_SERIAL(CLine)public:CLine(POINT pStart, POINT pEnd, int Width, int Style, COLORREF color);void Drawing(CDC *pDC);virtual void Serialize(CAr

37、chive &ar);2. CLine类实现代码IMPLEMENT_SERIAL(CLine, CShape, 1)CLine:CLine(POINT pStart, POINT pEnd, int Width, int Style, COLORREF Color)m_pStart=pStart; m_pEnd=pEnd;m_pWidth=Width; m_pStyle=Style; m_pColor=Color;void CLine:Drawing(CDC *pDC)CPen NewPen, *pOldPen;NewPen.CreatePen(m_pStyle, m_pWidth, m_pC

38、olor);pOldPen=pDC-SelectObject(&NewPen);pDC-MoveTo(m_pStart); pDC-LineTo(m_pEnd);pDC-SelectObject(pOldPen);void CLine:Serialize(CArchive &ar)if(ar.IsStoring()arm_pStart.xm_pStart.ym_pEnd.xm_pStart.xm_pStart.ym_pEnd.xm_pEnd.y;CShape:Serialize(ar);4.2.3 矩形类CRectangle1. CRectangle类定义代码class CRectangle:

39、public CShapeprotected:POINT m_pFP, m_pSP;COLORREF m_FColor;int m_FFlag, m_HFlag, m_pHatch;CRectangle()DECLARE_SERIAL(CRectangle)public:CRectangle(POINT pFP, POINT pSP, int Width, int Style, COLORREF Color,int m_FFlag, COLORREF FColor, int HFlag, int pHatch);void Drawing(CDC *pDC);virtual void Seria

40、lize(CArchive &ar);2. CRectangle类实现代码IMPLEMENT_SERIAL(CRectangle, CShape, 1)CRectangle:CRectangle(POINT pFP, POINT pSP, int Width, int Style, COLORREF Color, int FFlag, COLORREF FColor, int HFlag, int pHatch)m_pFP=pFP; m_pSP=pSP;m_pWidth=Width; m_pStyle=Style; m_pColor=Color;m_FFlag=FFlag; m_FColor=

41、FColor;m_HFlag=HFlag; m_pHatch=pHatch;void CRectangle:Drawing(CDC *pDC)CPen NewPen, *pOldPen;NewPen.CreatePen(m_pStyle, m_pWidth, m_pColor);pOldPen=pDC-SelectObject(&NewPen);pDC-SelectStockObject(NULL_BRUSH);CBrush NewBrush, *pOldBrush;if(m_FFlag)if(m_HFlag=0)NewBrush.CreateSolidBrush(m_FColor);else

42、NewBrush.CreateHatchBrush(m_pHatch, m_FColor);pOldBrush=pDC-SelectObject(&NewBrush);pDC-Rectangle(m_pFP.x, m_pFP.y, m_pSP.x, m_pSP.y);pDC-SelectObject(pOldPen);if(m_FFlag) pDC-SelectObject(pOldBrush);void CRectangle:Serialize(CArchive &ar)if(ar.IsStoring()arm_pFP.xm_pFP.ym_pSP.xm_pSP.ym_FFlagm_FColo

43、rm_HFlagm_pFP.xm_pFP.ym_pSP.xm_pSP.ym_FFlagm_FColorm_HFlagm_pHatch;CShape:Serialize(ar);4.2.4 圆类CCircle1. CCircle类定义代码class CCircle: public CShapeprotected:POINT m_pFP, m_pSP;COLORREF m_FColor;int m_FFlag, m_HFlag, m_HPattern;CCircle()DECLARE_SERIAL(CCircle)public:CCircle(POINT pFP, POINT pSP, int W

44、idth, int Style, COLORREF Color, int m_FFlag, COLORREF FColor, int HFlag, int HPattern);void Drawing(CDC *pDC);virtual void Serialize(CArchive &ar);void VCCircle(CDC *pDC);2. CCircle类实现代码IMPLEMENT_SERIAL(CCircle, CShape, 1)CCircle:CCircle(POINT pFP, POINT pSP, int Width, int Style, COLORREF Color, i

45、nt FFlag, COLORREF FColor, int HFlag, int HPattern)m_pFP=pFP; m_pSP=pSP;m_pWidth=Width; m_pStyle=Style; m_pColor=Color;m_FFlag=FFlag; m_FColor=FColor;m_HFlag=HFlag; m_HPattern=HPattern;void CCircle:Drawing(CDC *pDC)CPen NewPen, *pOldPen;NewPen.CreatePen(m_pStyle, m_pWidth, m_pColor);pOldPen=pDC-SelectObject(&NewPen);pDC-SelectStockObject(NULL_BRUSH);CBrush NewBrush, *pO

展开阅读全文
相关资源
相关搜索
资源标签

当前位置:首页 > 学术论文 > 毕业设计

版权声明:以上文章中所选用的图片及文字来源于网络以及用户投稿,由于未联系到知识产权人或未发现有关知识产权的登记,如有知识产权人并不愿意我们使用,如有侵权请立即联系:2622162128@qq.com ,我们立即下架或删除。

Copyright© 2022-2024 www.wodocx.com ,All Rights Reserved |陕ICP备19002583号-1 

陕公网安备 61072602000132号     违法和不良信息举报:0916-4228922