




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、精选优质文档-倾情为你奉上学校代码 10126 学号 本科学年论文题 目 基于C+的简单Windows画图程序设计院 系 内蒙古大学鄂尔多斯学院 专业名称 自动化 年 级 2008 级 学生姓名 宋 杰 指导教师 金 涛 2011年06月20日 学年论文指导教师评阅意见学 生姓 名宋 杰专 业班 级自动化学号2008级(论文)题目基于C+的简单Windows画图程序设计指导教师金 涛教师职称学年论文评语 评定成绩: 指导教师签名: 年 月 日专心-专注-专业基于C+的简单Windows画图程序设计摘 要本文简要介绍了基于C+的简单画图程序的实验设计过程。该设计以C+这一高级语言为基础,依托VC
2、+开发环境中的MFC类设计而成,可实现最基本的绘图以及图形的保存与修改等功能。程序开发过程中采用了面向对象技术,易于扩充和维护。通过本次设计对面向对象技术及MFC有更深刻的了解,为今后图形系统的开发及可视化程序的设计提供了一个良好的实践基础。关键词:VC+,MFC,对象,画图Simple Windows Drawing Program Based On C+ABSTRACTThis article briefly describes the design process for a simple drawing program based on C+. The design based on
3、the C+ language, a high-level language, relying on MFC classes in the VC+ development environment designed, can provide the most basic features such as saving and modifying of the drawing, and graphics. The program using object-oriented technology in the development process, is easy to expand and ma
4、intain. Through this design to a more profound understanding of object-oriented technology and MFC for future development and Visual program design of graphic system provides a good basis for practice.KEYWORDS: VC+, MFC, object, drawing目 录第一章 引 言图形是Windows应用程序的重要组成部分,优美的图形界面是所有成功软件的共同特点。而绘图是Windows应
5、用程序的重要功能之一。与面向过程的C语言不同,C+是一门面向对象的,它为程序开发人员提供了极大的便利,因此C+是当前最为流行的基于Windows的语言开发工具之一,其功能的强大,几乎无所不能,程序开发人员多以精通VC+为追求目标。本次设计利用VC+开发简单的画图程序,并进一步了解和应用面向对象程序设计的思想。第二章 设计背景2.1 C+语言的发展背景2.1.1 C+语言的由来语言的发展是一个逐步递进的过程,C+ 是直接从 C 语言发展过来的。C语言的原型ALGOL 60语言(也称为A语言)。1978年由美国电话电报公司(AT&T)贝尔实验室正式发表了语言,后来由美国国家标准化协会(Am
6、erican National Standards Institute)制定了一个C语言标准,于一九八三年发表。通常称之为ANSI C。但是随着软件规模的增大,用C语言编写程序渐渐显得有些吃力了。为了解决软件危机,在20世纪80年代提出了面向对象的程序设计方法。以C语言为基础,C+应运而生。C+是由AT&T Bell(贝尔)实验室的Bjarne Stroustrup 博士及其同事于20世纪80年代初在C语言的基础上开发成功的。C+保留了C语言原有的所有优点,增加了面向对象的机制。C+是由C发展而来的, C+既可用于面向过程的结构化程序设计,又可用于面向对象的程序设计,是一种功能强大的混
7、合型的程序设计语言。1 2.1.2 C+语言的主要特点1、增加了面向对象的机制,提高了开发大型程序的效率,同时减轻了程序开发人员的负担。2、数据类型丰富、齐全。标准C+供了整数、实数、字符、字符串等基本数据类型,还提供数组、指针、结构体等构造数据类型。C+还增加了类这一特殊数据类型的定义机制。 3、语法限制不太严格,程序自由度大。但这既是优点也是缺点,该问题一直为各国程序开发者争论不休。而且,到目前为止没有一个完整的C+标准。4、编译系统生成的目标代码质量高,程序执行效率高。具有直接的硬件处理能力。5、程序可移植性通用性较强。C+中对于类的继承使得程序有着良好的可移植性。2.2 MFC简介MF
8、C,微软基础类(Microsoft Foundation Classes),实际上是微软提供的,用于在C+环境下编写应用程序的一个框架和引擎, MFC是Win API与C+的结合。API,即微软提供的Windows下应用程序的编程语言接口,是一种软件编程的规范,但它不是一种程序开发语言,可以允许用户使用各种各样的第三方的编程语言来进行对Windows下应用程序的开发,使这些被开发出来的应用程序能在Windows下运行,例如VB,VC+,Java,Delhpi编程语言函数本质上全部源于API,因此用它们开发出来的应用程序都能工作在Windows的消息机制和绘图里,遵守Windows作为一个操作系
9、统的内部实现。MFC是用来编写Windows应用程序的C+类集,该类集是按层次结构组织起来的,其中封装了大部分Windows API函数和Windows控件,它所包含的功能涉及到整个Windows操作系统。MFC不仅为用户提供而且还提供了创建应用程序的组件。使用MFC类库和Visual C+提供的高度可视的应用程序开发工具,可使应用程序开发变得更简单,极大地缩短开发周期,提高代码的可靠性和可重用性2。MFC把所有的API函数封装到各种类与对象内,是面向对象与Windows编程的有机结合,真正的体现出了C+这一面向对象机制语言的风格。2.3 程序开发环境Visual Stdio 2008 简介M
10、icrosoft Visual Studio 2008是微软与2007年底发布的一款集成开发环境,是面向Windows Vista、Office 2007、Web 2.0的开发工具。Visual Studio集成开发环境(IDE)提供了一组工具,它集成了创建、编译、连接和测试Windows应用程序的功能。开发环境提供这一组工具,完全是为了开发和调试更加方便,Visual C+ 2008包括了Visual C+库及Visual C+开发环境。2.3.1 Visual C+库Visual C+库包括行业标准活动模板库(ATL)、Microsoft 基础类(MFC)库、及各种标准库(如标准C+)库。
11、这些标准库由iostream 库、标准模板库(STL)和C运行时库(CRT)组成。CRT包括已知引起安全问题的函数的安全增强替代项。STL/CLR库为托管代码开发人员引入了STL具有数据封装新功能的C+支持库,其设计意图在于简化面向CLR的程序,这些库减少了程序开发人员的工作量。2.3.2 Visual C+开发环境 该开发环境为项目管理与配置(包括更好的支持大型项目)、源代码编辑、源代码浏览和调试工具提供强力支持。该环境还支持IntelliSense,在编写代码时,该功能可以提供智能化切且定于上下文的建议。在VC+编译区,能够自动识别C+语言的关键字和Windows的关键字,有助于编程人员在
12、编写程序时检查错误。其调试工具方法为断点调试、堆栈调试及跟踪调试3 。2.4 图形设备接口 GDI Windows操作系统是一种与设备无关的操作系统,因此Windows应用程序在与外设打交道时无须考虑具体的硬件设置。Windows操作系统是通过相应的功能模块来实现设备无关性的,图形设备接口(Graphics块viceInterface,GDI)就是这样的一种功能模块。当Windows应用程序需要在图形输出设备(显示器、打印机、绘图仪)上输出图形时,通过图形设备接口调用图形输出设备的驱动程序来完成输出过程4 。在VC+中MFC提供了两种用于支持GDI绘图的类,分别为设置绘图属性和绘制图形属性的上
13、下文设备类,以及封装了各种GDI绘图对象的绘图对象类。2.4.1 设备上下文设备上下文是GDI的核心,是用于代表设备连接的一种内部数据结构,该结构的数据规定了GDI函数的工作细节,其内容与具体的输出设备(打印机、显示器等)相对于。另外,通过调用特定的GDI函数可以随时对这些绘图属性进行适当的调整。2.4.2 绘图对象类GDI的对象类包括对画笔、画刷、位图、字体、调色板及区域等对象的表示和操作。例如CPen类、CBrush类、CCreateRectangle类、CMirro类以及CMove类等。不同的对象类可以完成不同的功能。在MFC中,CGdiObject是图形对象类的抽象基类,所有的GDI对
14、象类都是通过其派生而来的。本次设计中具体用到的对象类将在下文中作进一步阐述。第三章 程序设计3.1 设计预期目的 利用MFC类库设计简单的Windows画图程序,实现绘制直线、矩形、圆形等图形功能,并可改变线宽和线的颜色。在设计过程中熟悉并掌握MFC类库的使用,进一步提高C+编程的技能。3.2 设计思路本次设计以Microsoft Visual Studio 2008作为开发环境,并利用微软基础类库(MFC)进行程序的设计开发。主要包括菜单栏、工具栏等一系列的设计。由于使用了MFC类库,使得程序的设计负担大大减轻。首先,利用MFC类库生成一个单文档应用程序,该程序已包含最基本的程序属性,例如菜
15、单栏、工具栏、状态栏等;其次为已生成的程序菜单栏和工具栏中分别添加绘图项和绘图工具按钮,并为其添加相应的消息响应处理函数,从而实现不同的绘图功能,如绘制直线、绘制矩形框、绘制圆等;随后加入对以绘制图形的操作到菜单栏,同样添加相应的消息响应处理函数,以实现图形的镜像、移动和线的颜色和宽度调整;最后,对整个程序进行整体编译,在屏幕上输出应用程序,并测试设计效果。本次设计的部分原程序详见附录。3.3 设计流程主程序与绘图对象类设计流程如图3.1及图3.2所示。3.4 设计中使用到的主要对象类简介3.4.1 CPen 类在MFC中画笔的对象,它用来完成绘制线条的任务。初始化时,系统自动提供了一支黑色的
16、默认画笔。也可以进行自定义。创建画笔对象时,需要使用CPen类的构造函数,它的原型为:CPen(Int style,int width ,COLORREF color); style:画笔的样式 width:画笔的宽度 color:画笔的颜色(颜色用RGB值来描述)3.4.2 CBrush 类 CBrush 类中封装有MFC的画刷对象。使用CBrush对象之前要构造它,然后传给需要画刷的CDC成员函数。画刷可以是实线的、阴影线的或图案的。3.4.3 CRectangle类MFC中的矩形类,由图形基类派生,封装了矩形特征。其设计中使用的构造函数为:CRectangle:CRectangle()s
17、trcpy(m_className,"CRectangle");图3.1 主程序流程图 3.4.4 CCircle类MFC中的圆类,同样由图形基类派生,封装了圆的特征。设计中该类的构造函数为:CCircle:CCircle()strcpy(m_className,"CCircle");nRadius = 0; 图3.2 绘图对象类设计流程3.4.5 CMirrorShape类镜像类,通过该类能够实现图形的镜像操作。该类的声明如下:class CMirrorShape public:POINT MirrorBeginPos; /镜像始点POINT Mirr
18、orEndPos; /镜像终点double SinAngle; /正弦double CosAngle; /余弦double TgAngle; /正切POINT SourceEndPos; /源点终点POINT SourceBeginPos; /源点始点public:CMirrorShape();virtual CMirrorShape();virtual void Mirror(HDC hdc,POINT BeginPos,POINT PrePos, POINT EndPos)void SetSinCos(POINT BeginPos,POINT EndPos);void SetMirrorP
19、os(POINT BeginPos, POINT EndPos);3.5 程序设计过程简述本次设计基于MFC类库,使设计工作量大大减轻,但实际上仍存在大量的设计工作,只是其中的一部分由MFC类库帮助程序开发者完成。限于篇幅,仅对菜单的初始设计过程及直线绘制的设计过程作简要介绍。3.5.1 菜单的初始设计过程首先,打开Microsoft Visual Studio 2008集成环境,如图3.3所示。第二步,单击“文件”“新建”“项目”,新建一个项目并命名为drawing,项目类型为MFC,模板为MFC应用程序。如图3.4所示。 图3.3 VS2008集成环境 图3.4 新建项目drawing第三
20、步,在MFC应用程序向导的应用程序类型对话框中选择单文档,其他默认即可,然后点击“下一步”。如图3.5所示。第四步,出现“复合文档支持”对话框,使用默认设置即可。第五步,在“文档模板字符串”对话框中填入程序中使用文件的扩展名,如.jpeg,.bmp等,随后再次单击“下一步”。如图3.6所示 图3.5 应用程序类型对话框 图3.6 文档模板字符串对话框 第六步,由于本次设计没有使用数据库,因此在“数据库支持”对话框中的“数据库支持”中选“无”。单击“下一步”。如图3.7所示。 第七步,对于之后的“用户界面功能”和“高级功能”对话框,使用默认即可。如图3.8和3.9所示。 图3.7 数据库支持对话
21、框 图3.8 用户界面功能对话框 最后,向导会列出设计中使用的MFC类,如图3.9所示。点击“完成”,将生成的源代码进行编译,就得到了初始的菜单。如图3.10所示。当然,这并不满足设计要求,需要进行修改。 图3.9 高级功能对话框 图3.10 生成的类对话框图3.11生成的初始菜单3.5.2 直线绘制功能设计过程简述 直线绘制功能的实现主要依靠软件完成,该功能由Line.h及Line.cpp两个文件组成。具体源代码请参见附录一。在Line.h中主要定义了绘制直线所用的类CLine,该类继承了基类CShape中的成员,并在类体中声明了坐标捕捉函数pick及绘图函数Draw等相关函数。总之,Lin
22、e.h文件主要完成直线绘制代码的定义部分。在Line.cpp中主要完成功能的实现。文件中具体对坐标捕捉函数pick及绘图函数Draw等相关函数进行了定义。其中绘图函数Draw主要用于产生画笔Pen并生成直线;而坐标捕捉函数pick主要用于定义直线的长度;最后,直线起点和终点确定函数DrawRect用于标记直线的起点和终点。限于篇幅,对源代码就不进行详尽的解释了。利用该代码可以实现直线的任意绘制,总的来说还是比较方便的。第四章 程序运行结果及说明1、运行程序,弹出初始对话框,如图4.1所示。 图4.1 初始运行对话框 图4.2 直线、矩形及圆形绘制效果图2、分别进行直线、矩形和圆形的绘制如图4.
23、2所示。 图4.3 绘制镜像 图4.4 图形移动3、绘制镜像,如图4.3所示。4、图形移动,如图4.4所示。第五章 结果与讨论由于功能完善、开发迅速独立、针对性强、成本低廉等优点,使用MFC在特定领域开发专用软件已经成为了一种趋势。本次设计利用MFC类库,使用C+语言实现了简单的画图功能。虽然已经初步实现了基本的绘图功能,如绘制直线、矩形和圆形,但并未实现线宽度和线颜色的任意变换这一功能。主要原因有:1、时间准备不足。2、对MFC的掌握不够,没有正确的写入代码。3、C+编程技术掌握比较肤浅,没有真正掌握程序设计方法。这些问题都将会在以后逐步完善。 这次设计让我对C+语言有了深层次的认识,之前总
24、是认为C+语言只能实现一些小的功能,如排序、查找输出等。设计的过程中让我对这门语言有了新的认识,尤其是对MFC类库的接触令我对应用程序的开发有了一个浅显的了解。虽然程序的功能并未完全实现,但这次设计对我的编程能力有了很大的提高。我也会在以后的时间里继续研究,不断提升自己的能力。参考文献1谭浩强.C+程序设计M.北京:清华大学出版社,20042 黄维通. Visual C+面向对象与可视化程序设计M.北京:清华大学出版社, 20003三扬科技.Visual C+开发入行真功夫M.北京:电子工业出版社,2009.44 吴星,沈琳. MFC如何实现绘图功能J. 福建电脑, 2002,(12) 致 谢
25、本次设计得到了指导老师金涛老师的悉心指导和关注,在此表示衷心的感谢。此外,与我一并完成课题研究的王泽龙同学也对我的设计提出了一些中肯的意见和建议,同样对他表示感谢。虽然设计中有些功能未完全达到预期效果,但如果没有他们的指导和建议,这次的课题设计是不可能顺利完成的,在此再一次表示感谢。附录一部分源程序:/ Line.h: interface for the CLine class.#if !defined(AFX_LINE_H_6D68BA0D_A19F_4C30_BB62_6D0F_INCLUDED_)#define AFX_LINE_H_6D68BA0D_A19F_4C30_BB62_6D0
26、F_INCLUDED_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000#include "Shape.h"/直线类定义class CLine : public CShape public:CLine();virtual CLine();public:virtual BOOL pick(POINT);virtual void Draw(HDC);virtual void DrawRect(HDC);virtual void SaveClassName(ostream &ofstr)ofstr<<m_className;#endif / !defined(AFX_LINE_H_6D68BA0D_A19F_4C30_BB62_6D0F_INCLUDED_)/ Line.cpp: implementation of the CLine class.#include "stdafx.h"#include "Line.h"#inclu
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 二零二五年度板材采购供应合同范本
- 二零二五年办公设备专业维修与保养服务合同
- 二零二五年度商业综合体场地调研与运营合同
- 二零二五年度电子产品进出口贸易合同模板
- 二零二五年度专业安保团队保安员劳动合同范本
- 2025版信息技术测试加工综合服务合同
- 2025版补偿贸易与智能电网建设合作协议
- 2025版标准临时休闲设施租赁合同范本发布
- 2025版甜品店股份合作项目合同书
- 二零二五年度消防安全技术服务与培训协议
- 会务工作人员培训课件
- 会务服务培训课件
- 股权质押项目交易方案
- 江河治理与防洪工程课件
- 网络安全知识培训资料
- 2025年下半年中小学教师资格考试题库带答案
- 同业培训课件
- 中试平台运营管理制度
- 2025年江苏省高考化学试卷真题(含答案详解)
- 2025年沪科版八年级(初二)下学期物理期末考试模拟测试卷02
- DB13T 1347-2010 城镇居住区绿地规划设计规范
评论
0/150
提交评论