毕业设计基于VisualC绘图软件设计.docx
- 文档编号:18385610
- 上传时间:2023-04-24
- 格式:DOCX
- 页数:27
- 大小:73.11KB
毕业设计基于VisualC绘图软件设计.docx
《毕业设计基于VisualC绘图软件设计.docx》由会员分享,可在线阅读,更多相关《毕业设计基于VisualC绘图软件设计.docx(27页珍藏版)》请在冰豆网上搜索。
毕业设计基于VisualC绘图软件设计
摘要
本文主要介绍了基于VisualC++环境下的图形开发的基本过程。
画图软件的基本功能包括基本图形绘制和填充(直线、椭圆、三角形、四边形、多边形),更改图元绘制条件(改变线条颜色、线型、填充方式)和图元的保存功能。
要求:
实现所见即所得绘图功能;实现图元选择功能;实现图元移动功能;实现画笔和画刷风格认定功能;实现图元修改功能;实现图形文件的存储功能。
能过程序设计以达到提高VC++的编程水平的目的。
计算机图形学是计算机科学的重要分支,真实感图形生成技术更是目前研究的热点。
论文首先简要介绍了VisualC++及其实现技术,绘图程序的构成及主要流程;然后详细介绍了绘图程序的系统设计,并给出了该程序的实现方案及技术细节,包括运行环境的配置及各个功能模块的实现细节等。
关键字:
MFC,程序框架,用户界面,VC++
Abstract
ThemainbodyofabookhasbeenintroducedmainlyowingtodevelopmentfundamentallowerVisualC++environmentartworkprocess.Drawsthesoftwarethebasicfunctionincludingthebasicgraphplanandthepacking(straightline,ellipse,triangle,quadrangle,polygon),changechartYuanplancondition(changelinecolor,linear,packingway)andchartYuanpreservationfunction.Request:
Therealizationseesnamelytheobtainedcartographyfunction;RealizationchartYuanchoicefunction;RealizationchartYuanmigrationfunction;Realizesthepaintbrushandthepicturebrushesthestyletorecognizethefunction;RealizationchartYuanrevisionfunction;Realizationgraphicfilememoryfunction.CantheprogrammingachieveenhancesVC++theprogramminglevelgoal.
Computergraphicsisimportantcomputersciencebranch,thatgraphicsofrealisticrenderinggeneratesatechnologyisthehotspotstudyingatpresentmore.FirstbriefBasichavingintroducedVisualandtheirformationandmaintechnologicalprocessrealizingthetechnology,theproceduredrawingofthesis;Thesystemhavingintroducedtheproceduredrawing'sthendetailedlyhasbeendesigned,hasgivenoutandowingtheprocedurerealizationtheschemeandtechnologydetail,realizingdetailincludingrunningtheenvironmentallocationandeachfunctionsmoduleandsoon.
Keywords:
MFC,procedureframe,userinterface,VC++
前言
VisualC++作为程序设计的入门语言,具有易学易懂的特点。
VisualC++程序设计是培养我们程序逻辑能力的首选课程之一。
VisualC++不仅仅是一个编译器。
它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的C++来开发出专业级的Windows应用程序。
为了能充分利用这些特性,你必须理解C++程序设计语言。
随着信息和技术的广泛交流,绘图程序应用很广而且技术成熟。
VisualC++是一个功能强大的可视化开发工具,同时也在不断发展,利用VC开发的绘图程序更有前景。
本程序是一种简便有效的画图工具,能够将我们所画的图形直观快捷的展现出来。
它涉及了VisualC++编程常用的控件、部件,对于初学者来说不仅简单实用,而且能够透彻理解这些程序中的语句,有助于学习VisualC++[3]。
一个程序是否有友好的界面也是很重要的,对于用户来说越简单越好,当然还要使用户感到程序的方便。
常用的工具栏菜单栏要放在显眼处。
1系统开发目的和开发平台
1.1VC++6.0开发平台简介
VC6.0开发平台是一种支持可视化编程的可视化开发环境,是Microsoft公司1998推出的版本,其采用一种非常巧妙的方法将Windows的编程复杂性封装起来,使编程人员步入轻松容易地编写Windows应用程序的殿堂。
使用VC6.0开发平台,编程人员可以对C/C++程序进行各种操作,如建立、打开、浏览、编辑、保存、编译、链接和调试等。
1.2C++程序开发语言简介
C++是美国贝尔实验室于1980年开发出来的一种过程性与面向对象性结合的程序设计语言。
最初他把这种新的语言叫做“含类的C”,到1983年才取名为C++,它具有如下特点:
1.C++保持与C兼容。
2.用C++编写的程序可读性更好,代码结构更为合理,可直接地在程序中映射问题空间的结构。
3.生成代码的质量高,运行效率仅比汇编语言代码段慢10%到20%。
4.从开发时间、费用到形成的软件的可重用性、可扩充性、可维护性和可靠性等方面有了很大的提高,使得大中型的程序开发项目变得容易的多。
5.支持面向对象的机制,可方便地构造出模拟现实问题的实体和操作。
1.3系统开发内容
进入新世纪,随着科学技术的不断发展,计算机已经成为人们生活中不可缺少的一部分。
人们把计算机运用于各行各业,让它充分发挥作用,给我们的生产、生活带来许多便利。
尤其是网络的发展,让世界变小了,也让人类的视野更开阔、生活更丰富了。
作为21世纪计算机专业的大学生,我们的任务就是要用所学的理论知识创作出更多更人性化的软件,为现代生产、生活做贡献,方便广大计算机用户。
我们在学完VC++以后,为了更好的掌握和运用所学内容,完成了这个画图软件的制作,在这篇论文中我将详细向读者介绍一下我的设计思路和整个设计方法,以及对于这个软件的使用方法,以便读者更好的使用我的软件,使这个软件的功能得到更大的发挥,得到更好的推广。
其实这个软件的功能还没有完全的实现,希望以后它将得到更多人的修改,使之更为完善。
VisualC++不仅仅是一个编译器。
它是一个全面的应用程序开发环境,使用它你充分利用具有面向对象特性的C++来开发出专业级的Windows应用程序。
为了能充分利用这些特性,你必须理解C++程序设计语言。
掌握了C++,你就必须掌握Microsoft基本类库(MFC)的层次结构。
该层次结构包容了WindowsAPI中的用户界面部分,并使你能够很容易地以面向对象的方式建立Windows应用程序。
这种层次结构适用于所有版本的Windows并彼此兼容。
所用MFC所建立的代码是完全可移植的[1]。
Microsoft也提供了C++库,它位于任何WindowsAPI之上,能够使程序员的工作更容易。
它就是Microsoft基本类库(MFC),该库的主要优点是效率高。
它减少了大量在建立Windows程序时必须编写的代码。
同时它还提供了所有一般C++编程的优点,例如继承和封装。
MFC是可移植的,例如,在Windows3.1下编写的代码可以很容易地移植到WindowsNT或Windows95上。
因此,MFC很值得推荐的开发Windows应用程序的方法,在本教程自始至终使用的都是MFC。
与传统上使用C语言直接访问WindowsAPI相反,使用MFC和C++的优点是MFC已经包含和压缩了所有标准的“样板文件”代码,这些代码是所有用C编写的Windows程序所必需的。
因此用MFC编写的程序要比用C语言编写的程序小得多。
另外,MFC所编写的程序的性能也毫无损失。
必要时,你也可以直接调用标准C函数,因为MFC不修改也不隐藏Windows程序的基本结构。
最简单的Windows应用程序是使用单文档界面(SDI),只有一个框架窗口。
Windows的钟表、PIF编辑器、记事本等都是SDI应用程序的例子。
Windows也提供了一种称为多文档界面的组织形式,它可用于更复杂的应用程序。
MDI系统允许用户在同一应用程序中同时可以查看多个文档。
理解一个典型的MFC程序的结构和样式的最好方法是输入一段小程序,然后编译和运行它。
故此,应该在平时多实习那个小程序以提高自己的编程水平,这样才能在大的编程软件上很快的上手。
这也是这次程序设计的一个目的。
应用程序放在窗口中的任何用户界面对象都具有两种可控制的特性:
1)它的外观,2)它响应事件的行为。
要编写一个程序,当用户按下标有“退出”的按钮时要退出应用程序。
在程序中,编写代码来建立按钮:
指示按钮应如何动作。
然后,为其父窗口建立用户单击按钮时的消息映射,它试图要传递消息给其父窗口。
为了建立父窗口的消息,要建立截取消息映射的机制,并且使用按钮的消息。
当指定的按钮事件发生时,消息映射会请求MFC调用指定的函数。
1.4VisualC++的发展
随着C++逐渐成为ANSL标准,这种新的面向对象程序设计语言迅速成为程序员最广泛的使用工具。
众多C++语言的开发环境也随之不断的推出,竞争十分激烈。
1986年Borland公司开发了TurboC++程序语言,而后又推出了BorlandC++版本。
Microsoft公司于20世纪80年代中期在MicrosoftC6.0的基础上开发了MicrosoftC/C++7.0,同时引进了MicrosoftFoundationClass(MFC)库1.0版本,完善了代码。
以前的这些版本都是依赖DOS环境,或在Windows环境下的DOS模式下运行。
不久Microsoft公司推出了MicrosoftC8.0,即Visual1.0版本,它是Microsoft公司推出的第一个真正的基于Windows环境下的可视化的集成环境,将编辑、编译、链接和执行集成为一体。
从VisualC++1.5版本以后,Microsoft公司决定不在花更多的精力在16位编程上,虽然VisualC++2.0仍然提供对16位的支持,但从2.0以后,VisualC++更多的用来创建32位程序。
在版本上,Microsoft公司没有推出3.0版本,版本号直接从2.0跳到4.0,这样,VisualC++与MFC的版本号取得一致。
由于Internet的流行明显影响了产品的设计,在4.0版本,VisualC++引进了为Internet编程而设计的新类库。
5.0版本也增加了一些新类,但注意力更多的集中在改善产品的界面上,以提供一个更好的在线帮助系统,更高级的宏能力和对开发者内部进行类和其他代码的支持。
6.0和7.0版本在功能上做了进一步改进。
VisualC++经历了从1.0到7.0等版本的发展,软件系统逐渐庞大,功能日益改善。
2面向对象程序设计简介
2.1面向对象程序设计的发展
20世纪50年代的程序设计都是用机器语言或汇编语言编写的,使程序设计相当麻烦严重影响了计算机的普及。
随着计算机应用的日益广泛,发展了一系列不同风格的,为不同对象服务的程序设计语言,如Fortran语言,ALGOL,COBOL,C,Pascal,Ada,Lisp,Prolog,FFP等。
高级语言的蓬勃发展,使编译和形式语言理论日趋完善,但就整个程序设计方法而言,并无实质的改善。
自20世纪60年代末到70年代初,出现了大型软件系统,如操作系统,数据库等,这给程序员带来了新问题,大型软件系统的研制需花费大量的人力和物力,但编写出来的软件可*性差,错误多,难以维护,已经到了程序员无法控制的地步,这就是“软件危机”。
在1969年,E.W.Dijkstra首先提出了结构化程序设计的概念,他强调了从程序结构和风格上研究程序设计,为“软件危机”起了很大的缓解作用。
到20世纪70年代,机构化程序设计方法得到了很大的发展,NiklansWirth又提出了“算法+数据结构=程序设计”,程序设计方法,将软件划分成若干个可单独命名和编址的部分,他们被称为模块,模块化使软件能够有效的被管理和维护,能够有效地分解和处理复杂问题。
在20世纪70年代模块化程序设计方法普遍被人们接受。
软件开发是对问题的求解过程,从认识论角度看,软件开发过程包括人们对要解决问题及相关事物的认识和基于认识所进行的描述。
而结构化设计方法不能直接反映出人类认识问题的过程。
随着软件系统越来越庞大,结构化程序设计方法已显力不从心。
20世纪70年代,在软件开发中各种概念和方法积累的基础上,就如何超越程序的复杂性障碍,如何在计算机系统中自然的表示客观世界等问题,人们提出了面向对象的设计方法,它不是以过程为中心,而是以对象代表的问题解为中心环节,提出了“对象+对象=程序设计”理论,使人们对复杂系统的认识过程与系统的程序设计实现过程,尽可能的一致。
2.2面向对象程序设计语言
早在20世纪60年代,就出现了最早的面向对象语言Simula67语言,具有了类和对象的概念,随后又推出了纯面向对象设计语言,如40年代美国XeroxPaloAlto研究中心推出了Smaltalk,它完整地体现并进一步丰富了面向对象的概念。
这时面向对象语言已经形成了几大类别:
(1)纯面向对象语言,如Smalltalk和Eiffel
(2)混合型面向对象语言。
这类语言一般是在其他语言的基础上开发出来的面向对象语言,如C++和ObjectiveC。
(3)与人工智能语言结合形成的语言,如LOOPS、Flavors和CLOS。
(4)适合网络应用面向对象语言,如Java语言等。
目前面向对象方法被广泛应用,C++语言成为当前最流行的面向对象语言之一。
它是由AT&T公司的贝尔实验室的BjarneStioustrup博士开发的,是一门高效实用的混合型程序设计语言。
它最初的的设计目标是:
支持面向对象编程技术;支持抽象形态的类;是更好C语言。
C++语言包两部分:
一部分是C++基础部分,它是以C语言为核心的;另一部分是C++面向对象特性部分,是C++对语言的扩充部分。
这样它既支持面向对象程序设计方法,又支持结构化设计方法,同时广泛的应用基础和丰富的开发环境的支持,也使面向对象设计得到很普及。
2.3C++对面向对象技术的支持
C++作为一种面向对象程序设计语言,具有对象、类、方法消息等概念,同时支持面向对象的封装机制和继承、多态机制。
2.3.1C++对封装机制的支持
封装机制有两个含义:
一是把属性(数据结构)同服务(操作数据的函数)结合在一起;如有一组数据是准备一图形所需的信息,在传统的C语言中要将数据与画图程序分开处理,而在C++语言中通过class重新定义类,将数据与操作数据的函数结合起来。
封装的另外一个含义是尽可能的将函数的内部数据进行隐藏。
这样在对象之外,只可以看到对象的行为,而不能看到对象的细节,也不能修改对象的内部信息,以保证对象的独立性。
C++语言定义类时,可以访问权限关键字private(私有的)、protected(保护的)、public(公有的)限制对象内部数据的访问权限。
2.3.2C++对继承机制的支持
在C++中增加了一种重要机制——继承和派生。
可以从一个或多个已定义的基类中继承属性和服务,同时也可以重新定义或加进新的数据和行为,这样建立起类的层次结构[4]。
2.3.3C++对多态机制的支持
多态性有静态和动态之分。
静态多态性是在编译阶段根据操作数据从多个同名函数中选择响应的调用;动态性是在执行阶段才根据产生的信息需要调用函数,调用不同的函数即意味着执行不同的处理方式。
在C++中,对静态多态性的支持是通过对函数的重载功能,命名相同的函数,其实现的功能不同,C++会依据所给的数据来选择相应的功能函数。
C++通过派生类、虚函数,对象指针等概念完成动态多态性功能[4]。
3画图系统的分析与实现
3.1设计说明书
本程序是一个比较简单的画图软件,基本功能包括基本图形绘制和填充(直线、椭圆、三角形、四边形、多边形),更改图元绘制条件(改变线条颜色、线型、填充方式)和图元的保存功能。
要求:
1)实现所见即所得绘图功能;
2)实现图元选择功能;
3)实现图元移动功能;
4)实现画笔和画刷风格认定功能;
5)实现图元修改功能;
6)实现图形文件的存储功能。
画图:
画直线点一下工具栏中的直线图形按钮即可。
圆,矩形,弧线同样。
修改:
要修改圆元点一下左边工具栏中的鼠标箭头图形按钮,然后将鼠标移至待移动的图元上,待鼠标变为十字形时,即可改变图元的大小、长短,
移动:
将鼠标移至待移动的图元上鼠标这时变为手形,即可移动图元。
线条粗细:
可由鼠标右键功能菜单完成。
线条颜色:
可由鼠标右键功能菜单完成。
保存:
直接点击工具栏中的保存按钮即可。
打开:
直接点击工具栏中的打开按钮即可。
删除:
选中图元(鼠标变成手形)点击左边工具栏中的垃圾筒形的图形按钮即可将所选图元删除。
3.2系统功能设计
3.2.1程序功能模块
绘图应用程序中,我们将实现一般绘图应用程序所具有的绝大多数功能,并提供一些额外的辅助功能。
具体而言,其实现的功能主要包括如下方面:
(1)绘制图元
可以通过绘图工具栏绘制下列图元:
直线图元,或者称为线段图元,允许用户使用鼠标选择直线顶点绘制。
曲线图元,允许用户拖动鼠标画出任意形状的曲线。
椭圆图元,允许用户拖动鼠标控制椭圆的外接矩形,来进行绘制。
矩形图元,使用鼠标控制矩形的位置和外形。
绘制文本,在用户选顶的位置输出用户指定的文本
绘图操作都能够被撤消或恢复。
(2)改变绘制条件
在绘制图元时,还可使用图元属性页进行图元属性的修改,包括:
颜色设定:
包括画笔颜色,画刷颜色以及背景颜色。
风格设定:
包括画笔的线条和宽度,画刷的填充范围及形状等
(3)图形修改
删除被选图形,其中被选中的图形可以一个或多个。
移动被选图形,其中被选图形可以是一个或多个,多个图形可以被分别移动。
恢复最近操作。
撤消最近操作。
(4)绘图辅助
本程序所提供的辅助功能有:
选定绘图区域
清洁绘图区域
定位图形坐标,并在状态栏显示
(5)文件持久性
对于应用程序来说文件的持久性十分重要,要不能保证这一点,应用程序就很难说有什么存在价值。
本应用程序能够完成图形文件的保存、打开、打印,而且提供了将所绘图形转换为位图存储的功能。
根据应用程序所实现的功能,本程序可以被划分为以下模块:
基本图元绘制、图形修改、辅助功能、和图形文件存取等。
可以看出,划分这些模块的规则主要是根据功能之间的联系。
具有类似流程功能就可以被划分为一个模块。
图3.1是程序功能流程简图。
图3.1程序功能结构图
3.2.2系统界面设计
设计好的画图程序运行界面如图3.2所示:
图3.2窗体的建立
系统工具栏如图3.3所示:
图3.3系统工具栏
右键菜单如右图3.4:
图3.4右键菜单
系统界面设计代码简介或代码解析:
实现步骤:
1 创建一个SDI程序,视图基类选择CScrollView
2 添加必要的BMP资源见res\bitmap1.bmp,其ID为IDB_Draw
3 创建菜单资源,ID为IDR_DRAWMENU,具体菜单项参看工程
4 在DrawView.h中加入以下代码行:
private:
#defineCT_LINE0
#define CT_RECT1
#define CT_ELLIPSE2
typedef struct
{
CPoint BeginPoint; //鼠标按下的点坐标LButtonDown
CPoint EndPoint; //鼠标抬起的点坐标LButtonUp
BYTEbyType; //类型,这里有3中可能:
直线、矩形、椭圆(圆)
}P2P;
typedef struct
{
P2PCell[256]; //P2P类型的
int nCellCount; //记录已经绘制的元素的数目
intnSel;
}CELL;
UINTm_uCurOprt;
BOOLm_bDrawing;
CRectm_RefreshRect;
CELLm_Cell;
voidDrawLine(CPaintDC &dc, CPoint p1, CPoint p2); //画直线
voidDrawArrow(CPaintDC &dc, CPoint p1, CPoint p2); //画直线尾的箭头
voidDrawRect(CPaintDC &dc, CPoint p1, CPoint p2); //画矩形
voidDrawEllipse(CPaintDC &dc, CPoint p1, CPoint p2); //画椭圆
intSelObject(CPoint p);
voidDrawSel(CPaintDC &dc);
intGetMax(int n1, int n2);
intGetMin(int n1, int n2);
BOOLIsIn(int x, int x1, int x2);
doubleEquationX2(double a, double b, double c, double x1Direc, double x2Direc);
voidEquationX2(double a, double b, double c, int &x1, int &x2);
5 在CMainFrm中的OnCreate()中加入:
//绘图工具条
if (!
m_wndDrawToolBar.Create(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");
retu
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 毕业设计 基于 VisualC 绘图 软件设计