毕业设计(论文)基于visual c 绘图软件设计_第1页
毕业设计(论文)基于visual c 绘图软件设计_第2页
毕业设计(论文)基于visual c 绘图软件设计_第3页
毕业设计(论文)基于visual c 绘图软件设计_第4页
毕业设计(论文)基于visual c 绘图软件设计_第5页
已阅读5页,还剩26页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、 基于Visual C+绘图软件设计作者姓名: 专业名称:机械制造工艺与设备指导教师: 摘 要本文主要介绍了基于Visual C+环境下的图形开发的基本过程。画图软件的基本功能包括基本图形绘制和填充(直线、椭圆、三角形、四边形、多边形),更改图元绘制条件(改变线条颜色、线型、填充方式)和图元的保存功能。要求:实现所见即所得绘图功能;实现图元选择功能;实现图元移动功能;实现画笔和画刷风格认定功能;实现图元修改功能;实现图形文件的存储功能。能过程序设计以达到提高VC+的编程水平的目的。计算机图形学是计算机科学的重要分支,真实感图形生成技术更是目前研究的热点。论文首先简要介绍了Visual C+及其

2、实现技术,绘图程序的构成及主要流程;然后详细介绍了绘图程序的系统设计,并给出了该程序的实现方案及技术细节,包括运行环境的配置及各个功能模块的实现细节等。关键字:MFC,程序框架,用户界面,VC+AbstractThe main body of a book has been introduced mainly owing to development fundamental lower Visual C+ environment artwork process.Draws the software the basic function including the basic graph pla

3、n and the packing (straight line, ellipse, triangle, quadrangle, polygon), change chart Yuan plan condition (change line color, linear, packing way) and chart Yuan preservation function.Request: The realization sees namely the obtained cartography function; Realization chart Yuan choice function; Re

4、alization chart Yuan migration function; Realizes the paint brush and the picture brushes the style to recognize the function; Realization chart Yuan revision function; Realization graphic file memory function.Can the programming achieve enhances VC+ the programming level goal.Computer graphics is i

5、mportant computer science branch , that graphics of realistic rendering generates a technology is the hot spot studying at present more. First brief Basic having introduced Visual and their formation and main technological process realizing the technology , the procedure drawing of thesis; The syste

6、m having introduced the procedure drawings then detailedly has been designed , has given out and owing the procedure realization the scheme and technology detail , realizing detail including running the environment allocation and each functions module and so on.Keywords: MFC, procedure frame, user i

7、nterface, VC+目录摘 要IAbstractII目录II前 言11 系统开发目的和开发平台21.1 VC+6.0开发平台简介21.2 C+程序开发语言简介21.3 系统开发内容21.4 Visual C+的发展42 面向对象程序设计简介62.1面向对象程序设计的发展62.2 面向对象程序设计语言72.3 C+对面向对象技术的支持72.3.1 C+对封装机制的支持72.3.2 C+对继承机制的支持82.3.3 C+对多态机制的支持83 画图系统的分析与实现93.1设计说明书93.2系统功能设计103.2.1 程序功能模块103.2.2 系统界面设计113.3系统功能的实现153.3.1

8、图元数据的定义153.3.2实现所见即所得绘图16总结25致谢26参考文献27前 言Visual C+作为程序设计的入门语言,具有易学易懂的特点。Visual C+程序设计是培养我们程序逻辑能力的首选课程之一。Visual C+ 不仅仅是一个编译器。它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的C+ 来开发出专业级的 Windows 应用程序。为了能充分利用这些特性,你必须理解 C+ 程序设计语言。 随着信息和技术的广泛交流,绘图程序应用很广而且技术成熟。Visual C+是一个功能强大的可视化开发工具,同时也在不断发展,利用VC开发的绘图程序更有前景。本程序是一种简便有效

9、的画图工具,能够将我们所画的图形直观快捷的展现出来。它涉及了Visual C+编程常用的控件、部件,对于初学者来说不仅简单实用,而且能够透彻理解这些程序中的语句,有助于学习Visual C+3。一个程序是否有友好的界面也是很重要的,对于用户来说越简单越好,当然还要使用户感到程序的方便。常用的工具栏菜单栏要放在显眼处。1 系统开发目的和开发平台1.1 VC+6.0开发平台简介VC6.0开发平台是一种支持可视化编程的可视化开发环境,是Microsoft公司1998推出的版本,其采用一种非常巧妙的方法将Windows的编程复杂性封装起来,使编程人员步入轻松容易地编写Windows应用程序的殿堂。使用

10、VC6.0开发平台,编程人员可以对C/C+程序进行各种操作,如建立、打开、浏览、编辑、保存、编译、链接和调试等。 1.2 C+程序开发语言简介 C+是美国贝尔实验室于1980年开发出来的一种过程性与面向对象性结合的程序设计语言。最初他把这种新的语言叫做“含类的C”,到1983年才取名为C+,它具有如下特点: 1C+保持与C兼容。 2用C+编写的程序可读性更好,代码结构更为合理,可直接地在程序中映射问题空间的结构。 3生成代码的质量高,运行效率仅比汇编语言代码段慢10%到20%。 4从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发项目变

11、得容易的多。 5支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。 1.3系统开发内容进入新世纪,随着科学技术的不断发展,计算机已经成为人们生活中不可缺少的一部分。人们把计算机运用于各行各业,让它充分发挥作用,给我们的生产、生活带来许多便利。尤其是网络的发展,让世界变小了,也让人类的视野更开阔、生活更丰富了。作为21世纪计算机专业的大学生,我们的任务就是要用所学的理论知识创作出更多更人性化的软件,为现代生产、生活做贡献,方便广大计算机用户。我们在学完VC+以后,为了更好的掌握和运用所学内容,完成了这个画图软件的制作,在这篇论文中我将详细向读者介绍一下我的设计思路和整个设计方法,以及对

12、于这个软件的使用方法,以便读者更好的使用我的软件,使这个软件的功能得到更大的发挥,得到更好的推广。其实这个软件的功能还没有完全的实现,希望以后它将得到更多人的修改,使之更为完善。Visual C+ 不仅仅是一个编译器。它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的 C+ 来开发出专业级的 Windows 应用程序。为了能充分利用这些特性,你必须理解 C+ 程序设计语言。掌握了C+,你就必须掌握 Microsoft 基本类库 (MFC) 的层次结构。该层次 结构包容了 Windows API 中的用户界面部分,并使你能够很容易地以面向对象的方式建立 Windows 应用程序。

13、这种层次结构适用于所有版本的 Windows 并彼此兼容。所用 MFC 所建立的代码是完全可移植的1。Microsoft 也提供了 C+ 库,它位于任何 Windows API 之上,能够使程序员的工作更容易。它就是Microsoft基本类库 (MFC),该库的主要优点是效率高。它减少了大量在建立 Windows 程序时必须编写的代码。同时它还提供了所有一般 C+ 编程的优点,例如继承和封装。MFC 是可移植的,例如,在 Windows 3.1下编写的代码可以很容易地移植到 Windows NT 或 Windows 95 上。因此,MFC 很值得推荐的开发Windows 应用程序的方法,在本教

14、程自始至终使用的都是 MFC。与传统上使用 C 语言直接访问 Windows API相反,使用 MFC 和 C+ 的优点是 MFC 已经包含和压缩了所有标准的“样板文件”代码,这些代码是所有用 C 编写的 Windows 程序所必需的。因此用 MFC 编写的程序要比用C语言编写的程序小得多。另外,MFC 所编写的程序的性能也毫无损失。必要时,你也可以直接调用标准 C 函数,因为 MFC 不修改也不隐藏 Windows 程序的基本结构。最简单的 Windows 应用程序是使用单文档界面(SDI),只有一个框架窗口。Windows 的钟表、PIF 编辑器、记事本等都是 SDI 应用程序的例子。Wi

15、ndows 也提供了一种称为多文档界面的组织形式,它可用于更复杂的应用程序。MDI 系统允许用户在同一应用程序中同时可以查看多个文档。理解一个典型的 MFC 程序的结构和样式的最好方法是输入一段小程序,然后编译和运行它。故此,应该在平时多实习那个小程序以提高自己的编程水平,这样才能在大的编程软件上很快的上手。这也是这次程序设计的一个目的。应用程序放在窗口中的任何用户界面对象都具有两种可控制的特性:1) 它的外观,2) 它响应事件的行为。要编写一个程序,当用户按下标有“退出”的按钮时要退出应用程序。在程序中,编写代码来建立按钮:指示按钮应如何动作。然后,为其父窗口建立用户单击按钮时的消息映射,它

16、试图要传递消息给其父窗口。为了建立父窗口的消息,要建立截取消息映射的机制,并且使用按钮的消息。当指定的按钮事件发生时,消息映射会请求MFC调用指定的函数。1.4 Visual C+的发展随着C+逐渐成为ANSL标准,这种新的面向对象程序设计语言迅速成为程序员最广泛的使用工具。众多C+语言的开发环境也随之不断的推出,竞争十分激烈。1986年Borland公司开发了Turbo C+程序语言,而后又推出了Borland C+版本。Microsoft公司于20世纪80年代中期在 Microsoft C 6.0的基础上开发了 Microsoft C/C+7.0,同时引进了Microsoft Founda

17、tion Class (MFC)库1.0版本,完善了代码。以前的这些版本都是依赖DOS环境,或在Windows环境下的DOS模式下运行。不久Microsoft公司推出了Microsoft C 8.0,即Visual 1.0 版本,它是Microsoft公司推出的第一个真正的基于Windows环境下的可视化的集成环境,将编辑、编译、链接和执行集成为一体。从Visual C+1.5版本以后,Microsoft公司决定不在花更多的精力在16位编程上,虽然Visual C+2.0仍然提供对16位的支持,但从2.0以后,Visual C+更多的用来创建32位程序。在版本上,Microsoft公司没有推出

18、3.0版本,版本号直接从2.0跳到4.0,这样,Visual C+与MFC的版本号取得一致。由于Internet的流行明显影响了产品的设计,在4.0版本,Visual C+引进了为Internet编程而设计的新类库。5.0版本也增加了一些新类,但注意力更多的集中在改善产品的界面上,以提供一个更好的在线帮助系统,更高级的宏能力和对开发者内部进行类和其他代码的支持。6.0和7.0版本在功能上做了进一步改进。Visual C+经历了从1.0到7.0等版本的发展,软件系统逐渐庞大,功能日益改善。2 面向对象程序设计简介2.1面向对象程序设计的发展20世纪50年代的程序设计都是用机器语言或汇编语言编写的

19、,使程序设计相当麻烦严重影响了计算机的普及。随着计算机应用的日益广泛,发展了一系列不同风格的,为不同对象服务的程序设计语言,如 Fortran 语言,ALGOL,COBOL,C,Pascal,Ada,Lisp, Prolog, FFP等。高级语言的蓬勃发展,使编译和形式语言理论日趋完善,但就整个程序设计方法而言,并无实质的改善。自20世纪60年代末到70年代初,出现了大型软件系统,如操作系统,数据库等,这给程序员带来了新问题,大型软件系统的研制需花费大量的人力和物力,但编写出来的软件可*性差,错误多,难以维护,已经到了程序员无法控制的地步,这就是“软件危机”。在1969年,E.W.Dijkst

20、ra首先提出了结构化程序设计的概念,他强调了从程序结构和风格上研究程序设计,为“软件危机”起了很大的缓解作用。到20世纪70年代,机构化程序设计方法得到了很大的发展,Niklans Wirth又提出了“算法+数据结构=程序设计”,程序设计方法,将软件划分成若干个可单独命名和编址的部分,他们被称为模块,模块化使软件能够有效的被管理和维护,能够有效地分解和处理复杂问题。在20世纪70年代模块化程序设计方法普遍被人们接受。软件开发是对问题的求解过程,从认识论角度看,软件开发过程包括人们对要解决问题及相关事物的认识和基于认识所进行的描述。而结构化设计方法不能直接反映出人类认识问题的过程。随着软件系统越

21、来越庞大,结构化程序设计方法已显力不从心。20世纪70年代,在软件开发中各种概念和方法积累的基础上,就如何超越程序的复杂性障碍,如何在计算机系统中自然的表示客观世界等问题,人们提出了面向对象的设计方法,它不是以过程为中心,而是以对象代表的问题解为中心环节,提出了“对象+对象=程序设计”理论,使人们对复杂系统的认识过程与系统的程序设计实现过程,尽可能的一致。2.2 面向对象程序设计语言早在20世纪60年代,就出现了最早的面向对象语言Simula67语言,具有了类和对象的概念,随后又推出了纯面向对象设计语言,如40年代美国Xerox Palo Alto 研究中心推出了 Smaltalk,它完整地体

22、现并进一步丰富了面向对象的概念。这时面向对象语言已经形成了几大类别: (1)纯面向对象语言,如 Smalltalk 和 Eiffel (2)混合型面向对象语言。这类语言一般是在其他语言的基础上开发出来的面向对象语言,如C+和Objective C。 (3)与人工智能语言结合形成的语言,如LOOPS、Flavors和CLOS。 (4)适合网络应用面向对象语言,如Java语言等。目前面向对象方法被广泛应用,C+语言成为当前最流行的面向对象语言之一。它是由AT&T公司的贝尔实验室的Bjarne Stioustrup 博士开发的,是一门高效实用的混合型程序设计语言。它最初的的设计目标是:支持面向对象编

23、程技术;支持抽象形态的类;是更好C语言。C+语言包两部分:一部分是C+基础部分,它是以C语言为核心的;另一部分是C+面向对象特性部分,是C+对语言的扩充部分。这样它既支持面向对象程序设计方法,又支持结构化设计方法,同时广泛的应用基础和丰富的开发环境的支持,也使面向对象设计得到很普及。2.3 C+对面向对象技术的支持C+作为一种面向对象程序设计语言,具有对象、类、方法消息等概念,同时支持面向对象的封装机制和继承、多态机制。2.3.1 C+对封装机制的支持封装机制有两个含义:一是把属性(数据结构)同服务(操作数据的函数)结合在一起;如有一组数据是准备一图形所需的信息,在传统的C语言中要将数据与画图

24、程序分开处理,而在C+语言中通过class重新定义类,将数据与操作数据的函数结合起来。封装的另外一个含义是尽可能的将函数的内部数据进行隐藏。这样在对象之外,只可以看到对象的行为,而不能看到对象的细节,也不能修改对象的内部信息,以保证对象的独立性。C+语言定义类时,可以访问权限关键字private(私有的)、protected(保护的)、public(公有的)限制对象内部数据的访问权限。2.3.2 C+对继承机制的支持在C+中增加了一种重要机制继承和派生。可以从一个或多个已定义的基类中继承属性和服务,同时也可以重新定义或加进新的数据和行为,这样建立起类的层次结构4。2.3.3 C+对多态机制的支

25、持多态性有静态和动态之分。静态多态性是在编译阶段根据操作数据从多个同名函数中选择响应的调用;动态性是在执行阶段才根据产生的信息需要调用函数,调用不同的函数即意味着执行不同的处理方式。在C+中,对静态多态性的支持是通过对函数的重载功能,命名相同的函数,其实现的功能不同,C+会依据所给的数据来选择相应的功能函数。C+通过派生类、虚函数,对象指针等概念完成动态多态性功能4。3 画图系统的分析与实现3.1设计说明书本程序是一个比较简单的画图软件,基本功能包括基本图形绘制和填充(直线、椭圆、三角形、四边形、多边形),更改图元绘制条件(改变线条颜色、线型、填充方式)和图元的保存功能。要求: 1) 实现所见

26、即所得绘图功能;2) 实现图元选择功能;3) 实现图元移动功能;4) 实现画笔和画刷风格认定功能;5) 实现图元修改功能;6) 实现图形文件的存储功能。画图:画直线点一下工具栏中的直线图形按钮即可。圆,矩形,弧线同样。修改:要修改圆元点一下左边工具栏中的鼠标箭头图形按钮,然后将鼠标移至待移动的图元上,待鼠标变为十字形时,即可改变图元的大小、长短,移动:将鼠标移至待移动的图元上鼠标这时变为手形,即可移动图元。线条粗细:可由鼠标右键功能菜单完成。线条颜色:可由鼠标右键功能菜单完成。保存:直接点击工具栏中的保存按钮即可。打开:直接点击工具栏中的打开按钮即可。删除:选中图元(鼠标变成手形)点击左边工具

27、栏中的垃圾筒形的图形按钮即可将所选图元删除。3.2系统功能设计3.2.1 程序功能模块绘图应用程序中,我们将实现一般绘图应用程序所具有的绝大多数功能,并提供一些额外的辅助功能。具体而言,其实现的功能主要包括如下方面:(1) 绘制图元可以通过绘图工具栏绘制下列图元:直线图元,或者称为线段图元,允许用户使用鼠标选择直线顶点绘制。曲线图元,允许用户拖动鼠标画出任意形状的曲线。椭圆图元,允许用户拖动鼠标控制椭圆的外接矩形,来进行绘制。矩形图元,使用鼠标控制矩形的位置和外形。绘制文本,在用户选顶的位置输出用户指定的文本绘图操作都能够被撤消或恢复。(2) 改变绘制条件在绘制图元时,还可使用图元属性页进行图

28、元属性的修改,包括:颜色设定:包括画笔颜色,画刷颜色以及背景颜色。风格设定:包括画笔的线条和宽度,画刷的填充范围及形状等(3) 图形修改删除被选图形,其中被选中的图形可以一个或多个。移动被选图形,其中被选图形可以是一个或多个,多个图形可以被分别移动。恢复最近操作。撤消最近操作。(4) 绘图辅助本程序所提供的辅助功能有:选定绘图区域清洁绘图区域定位图形坐标,并在状态栏显示(5) 文件持久性对于应用程序来说文件的持久性十分重要,要不能保证这一点,应用程序就很难说有什么存在价值。本应用程序能够完成图形文件的保存、打开、打印,而且提供了将所绘图形转换为位图存储的功能。根据应用程序所实现的功能,本程序可

29、以被划分为以下模块:基本图元绘制、图形修改、辅助功能、和图形文件存取等。可以看出,划分这些模块的规则主要是根据功能之间的联系。具有类似流程功能就可以被划分为一个模块。图3.1是程序功能流程简图。文件新建保存打开另存为打印退出画图圆矩形直线颜色黑色红色绿色蓝色黄色主菜单图3.1程序功能结构图3.2.2 系统界面设计设计好的画图程序运行界面如图3.2所示:图3.2窗体的建立系统工具栏如图3.3所示:图3.3系统工具栏右键菜单如右图3.4:图3.4右键菜单系统界面设计代码简介或代码解析:实现步骤:1创建一个SDI程序,视图基类选择CScrollView2添加必要的BMP资源见resbitmap1.b

30、mp,其ID为IDB_Draw3创建菜单资源,ID为IDR_DRAWMENU,具体菜单项参看工程4在DrawView.h中加入以下代码行:private:#define CT_LINE 0#defineCT_RECT 1#defineCT_ELLIPSE 2typedefstructCPointBeginPoint;/鼠标按下的点坐标LButtonDownCPointEndPoint;/鼠标抬起的点坐标LButtonUpBYTE byType;/类型,这里有3中可能:直线、矩形、椭圆(圆)P2P;typedefstructP2P Cell256;/P2P类型的intnCellCount;/记录

31、已经绘制的元素的数目int nSel;CELL;UINT m_uCurOprt;BOOL m_bDrawing;CRect m_RefreshRect;CELL m_Cell;void DrawLine(CPaintDC&dc,CPointp1,CPointp2);/画直线void DrawArrow(CPaintDC&dc,CPointp1,CPointp2);/画直线尾的箭头void DrawRect(CPaintDC&dc,CPointp1,CPointp2);/画矩形void DrawEllipse(CPaintDC&dc,CPointp1,CPointp2);/画椭圆int SelO

32、bject(CPointp);void DrawSel(CPaintDC&dc);int GetMax(intn1,intn2);int GetMin(intn1,intn2);BOOL IsIn(intx,intx1,intx2);double EquationX2(doublea,doubleb,doublec,doublex1Direc,doublex2Direc);void EquationX2(doublea,doubleb,doublec,int&x1,int&x2);5在CMainFrm中的OnCreate()中加入:/绘图工具条if(!m_wndDrawToolBar.Crea

33、te(this,WS_CHILD|WS_VISIBLE|CBRS_SIZE_FIXED|CBRS_TOP|CBRS_TOOLTIPS|CBRS_FLYBY,1102)|!m_wndDrawToolBar.LoadBitmap(IDB_Draw)|!m_wndDrawToolBar.SetButtons(DrawButtons,sizeof(DrawButtons)/sizeof(UINT)TRACE0(创建绘图工具条失败!n);return-1;./绘图工具条的位置m_wndDrawToolBar.EnableDocking(CBRS_ALIGN_LEFT);DockControlBar(&m

34、_wndDrawToolBar,AFX_IDW_DOCKBAR_LEFT);/工具条每行两个intnCount=m_wndDrawToolBar.GetToolBarCtrl().GetButtonCount();for(inti=0;iitemWidth=:GetSystemMetrics(SM_CYMENU)*4;lpMeasureItemStruct-itemHeight=:GetSystemMetrics(SM_CYMENU);void CMainFrame:OnDrawItem(int nIDCtl, LPDRAWITEMSTRUCT lpdis)/ TODO: 在此添加消息处理程序

35、代码和/或调用默认值/从可执行文件中加载位图BITMAP bm;CBitmap bitmap;bitmap.LoadOEMBitmap(OBM_CHECK);bitmap.GetObject(sizeof(bm),&bm);/得到设备环境CDC dc;dc.Attach(lpdis-hDC);/根据菜单是否被选中 决定是否高亮显示该项CBrush *pBrush=new CBrush(:GetSysColor(lpdis-itemState&ODS_SELECTED)?COLOR_HIGHLIGHT:COLOR_MENU);dc.FrameRect(&(lpdis-rcItem),pBrush

36、); delete pBrush;if(lpdis-itemState&ODS_CHECKED)/创建内存设备环境 并选入 从可执行文件中加载的位图CDC dcMem;dcMem.CreateCompatibleDC(&dc);CBitmap *pOldBitmap=dcMem.SelectObject(&bitmap);/把内存设备环境中的位图 拷贝到 绘图设备环境dc.BitBlt(lpdis-rcItem.left+4,lpdis-rcItem.top+(lpdis-rcItem.bottom-lpdis-rcItem.top)-bm.bmHeight)/2),bm.bmWidth,bm

37、.bmHeight,&dcMem,0,0,SRCCOPY);dcMem.SelectObject(pOldBitmap);/以上代码画菜单的底色/以下代码画菜单的前景色CDrawAppView *pView=(CDrawAppView *)GetActiveView();UINT itemID=lpdis-itemID&0xFFFF;if(itemID=ID_WEIGHT_1) CBrush brush(RGB(0,0,0);CRect rect=lpdis-rcItem;rect.DeflateRect(6,9);rect.left+=bm.bmWidth;dc.FillRect(rect,

38、&brush);elseif(itemID=ID_WEIGHT_2)CBrush brush(RGB(0,0,0);CRect rect=lpdis-rcItem;rect.DeflateRect(6,8);rect.left+=bm.bmWidth;dc.FillRect(rect,&brush);elseif(itemID=ID_WEIGHT_3)CBrush brush(RGB(0,0,0);CRect rect=lpdis-rcItem;rect.DeflateRect(6,7);rect.left+=bm.bmWidth;dc.FillRect(rect,&brush);elseif

39、(itemID=ID_WEIGHT_4)CBrush brush(RGB(0,0,0);CRect rect=lpdis-rcItem;rect.DeflateRect(6,6);rect.left+=bm.bmWidth;dc.FillRect(rect,&brush);elsepBrush=new CBrush(pView-m_clrColorsitemID-ID_COLOR_BLACK);CRect rect=lpdis-rcItem;rect.DeflateRect(6,4);rect.left+=bm.bmWidth;dc.FillRect(rect,pBrush);dc.Detac

40、h();(2)在客户区中单击鼠标,选择图无的起点。(3)移动鼠标,在此过程中需要鼠标移动消息相应函数进行处理。具体来说,就是根据鼠标移动位置动态绘制图元。 (4)图3.5是画图程序运行界面结果情况。 图3.5画图程序运行界面结果2. 绘制直线的步骤如下:(1)单击“绘制直线”按钮,使系统进入直线绘制状态。这需要向“绘制直线”按钮的消息响应函数OnDrawLine中添加代码,其代码如下: /绘制直线命令 Void CpainterView:OnDrawLine() /TODO: Add your command handler code here DrawType=new BYTE; *Draw

41、Type=LINE;(2)在客户区中单击鼠标,选择直线的起点。这需要向OnLButtonDown中相应的Case语句中添加代码。由于直线起点终点的选择和记录都是通过OnLButtonDown函数来完成的,因此需要使用DrawStep来标识不同的步骤,即当前是选择直线起点还是终点。实现代码如下: Case LINE: if(!DrawStep) Linenode=new LINENODE; Linenode-Start=point; DrawStep=1;Break;(3)移动鼠标,在此过程中需要通过鼠标移动消息的相应函数进行处理。具体来说,就是根据鼠标移动位置动态绘制直线,以直观地向用户展示绘

42、制过程。这样也有助于用户根据需要和当前直线的形态来选择直线终点。同时,在函数中还需要将上一次绘制的临时直线擦去。实现代码如下: Case LINE: If=dc-SetROP2(R2_NOTXORPEN); /设置以前的直线 dc-MoveTo(linenode-Start);dc-LineTo(Prepoint);/绘制当前直线 dc-MoveTo(linenode-Start);dc-LineTo(Point);PrePoint=Point;dc-SteROP2(ir); /恢复原始绘图模式break;(4)在客户区中单击识别,选择执行的终点。着需要向OnLButtonDown中相应的Ca

43、se语句中添加代码。此时DrawStep=1标识当前单击是选择直线终点。这一步实际上结束了当前直线的绘制,因此需要记录所有的图元数据和当前绘制的画笔,并将图元类型(DrawTyoe)和图元数据(linenode)存入图形数据链表中。实现代码如下:Case Line; If(!DrawStep) Linenode=new LINENODE; Linenode-Start=point; DrawStep=1; else If(!m_bNoTilt) /如果不处于禁止斜线状态 Linenode-End=point; Else If(abs(linenode-Strat.x-point.x)abs(l

44、inenode-Start.y-point.y) linenode-End.x=point.x; Linenode-End.y=linenode-Start.t; Else linenode-End.x=linenode-Start.x; Linenode-End.y=point.y; DrawStep=0; dc-MoveTo(linenode-Start); dc-lineTo(linenode-End); linenode-pen.Color=pencurcolor; linenode-pen.istyle=pentype; linenode-pen.iwidth=penwidth; O

45、ppindex+=1; Linenode-index=Oppindex; pDoc-RecordList.AddTail(DrawType); pDoc-RecordList.AddTail(linenode);Break;图3.6是绘制直线的情况。图3.6绘制直线 3. 绘制矩形(1)单击“绘制矩形”按钮,使系统进入直线绘制状态。这需要向“绘制矩形”按钮的消息响应函数OnDrawRectangle中添加代码,其代码如下: /绘制矩形命令 Void CpainterView:OnDrawRectangle () /TODO: Add your command handler code here

46、 DrawType=new BYTE; *DrawType=RECTANGLE;(2)在客户区中单击鼠标,选择直线的起点。这需要向OnLButtonDown中相应的Case语句中添加代码。记录完毕后需要改变DrawStep来触发应用程序对鼠标移动消息的响应。实现代码如下: Case LINE: if(!DrawStep) rectanglenode=new RECTANGLENNOD; rectanglenode -rT.left=point.x;rectanglenode -rT.top=point.y;rectanglenode -rT.right=point.x;rectanglenode -rT.bottom=point.y; DrawStep=1;Break;(3)移动鼠标,在此过程中需要通过鼠标移动消息的相应函数进行处理。由于在上一步中已经改DrawStep的值为1,从而开启了应用程序对鼠标移动的响应。具体来说,就是根据鼠标移动位置动态绘制直线,以直观地向用户展示绘制过程。这样也有助于用户根据需要和当前矩形的形状,来选择矩形的右下角。实现代码如下: Case RECTANGLE: If=dc-SetROP2(R2_NOTXORPEN); dc-Rectangle (&rectanglenode-rT); rectanglenode -rT.bottom=

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论