《mfc简单绘图程序.docx》由会员分享,可在线阅读,更多相关《mfc简单绘图程序.docx(39页珍藏版)》请在第壹文秘上搜索。
1、简单的绘图程序王帅书目摘要2靖至9J(/12设计目的脩馔:未定义书签.2功能说明22.1 菜单栏傅调:未定义书签.图形3画笔4画硬币42.2 工具栏52.3 状态栏53功能的实现53.1 v*3.2 aa63.3 编程思路及各个函数的实现7用喊7(2)代码的实现71 .为基本形态创建一个基类82 .基本形态类的创建82.1 矩形类的创建及定义82.2 圆形类的创建及定义102.3 正五边形类的创建及定义112.4 正三角形类的创建及定义142S椭圆类的创建及定义162.6 正四边形类的创建及的定义172.7 正六边形类的创建及定义182.8 直线类的创建及定义193 .各基本形态类在CMyDr
2、aw2_0类中的调用和绘图的实现203.1 矩形类的调用及及绘图的实现203.2 圆形类的调用243.3 正三角形类的调用253.4 基本类型调用的黑余代码264 .画笔的运用、颜色及大小的调整295 .画硬币356 .工具栏中的自定义控件387 .状态栏中的显示394程序功能的测试41542摘要I本绘图程序能够进行基本图形的绘画,如直线,圆,矩形,三角形等等,并且在此基础上添加了多边形的绘画,如正五边形等.除此之外,还能够进行顺手画,即用M标随意画线条。为了更好的绘图,还添加了对画笔粗细的调整,以及对画笔颜色的调整,除了特定的颜色,颜色还可依据输入的RGB值随意更改。还有一些老师的要求,加入
3、了画硬币、显示硬币数目即鼠标坐标等信息。本程序主要采纳面对对象写法。关键字:程序设计,MFC,绘图1 .引言设计目的本绘图程序的设计不仅仅局限于老师课堂的要求,通过C+的编写实现绘图要求,我还想要在此基础上,加入自己的一些想法,想要更好地了解MFa更好地去实现H己的想法。2 .功能说明2.1 菜单栏图形图形栏中包括直线、矩形、圆形、椭圆、多边形,多边形中包括正三角形、正四边形、正五边形、正六边形。选择直线,可用鼠标拖动画出一条直线选择矩形,可用鼠标推动画出矩形选择圆形,可用就标拖动画出圆形选择椭圆,可用鼠标拖动画出椭圆选择正三角形,可用鼠标拖动画出正三角形选择正四边形,可用鼠标拖动画出正方形选
4、择正五边形,可用鼠标拖动画出正五边形选择正六边形,可用鼠标拖动画出正六边形t注:为了验证自己的想法以及想让画出的图形随意地变换方向,特意在正三角形一项中加入了旋转效果,使鼠标在推动时能旋转三角形)画笔画箔栏中包括颜色、大小及铅笔(D颜色颜色中包括黑色、红色、绿色、蓝色、橙色、黄色、吉色、紫色、粉色、自定义选择黑色,画出的图形将为黑色选择红色,画出的图形将为红色选择绿色,画出的图形将为绿色选择橙色,画出的图形将为橙色选择黄色,画出的图形将为黄色选择音色,画出的图形将为青色选择紫色,画出的图形将为紫色选择粉色,画出的图形将为粉色选择自定义,可输入RGB值,画出的图形将显示输入的颜色(2)大小大小中
5、包括1、2、3、4、5、6、7选择1,画笔大小设为1选择2,画笔大小设为2选择3,画笔大小设为3选择4,画笔大小设为4选择5,画笔大小设为5选择6,画笔大小设为6选择7,画笔大小设为7(3)铅笔选中钳笔后,将可以用鼠标进行随意画经画硬币画硬币中包括画、增加、削减、清除选择画,将在客户端窗口中画出初始数班为IO的硬币选择增加,窗口中的硬币数目将增加1个选择削减,窗口中的硬币数目将削减1个选择清除,刷新窗口,将硬币消去2.2工具栏工具栏中除了原有的图标外,还加入了自定义的图标选择/,可用鼠标拖动画出条直线选齐口,可用鼠标拖动画出矩形选择,可用鼠标拖动画出圆形选择9,可用鼠标拖动画出正三角形选择二二
6、,可用鼠标进行顺手画选择+,可在窗口画出硬币后,将硬币数量+1选择一,可在窗口画出硬币后,将硬币数增-1选择Q,可利用鼠标对所绘图形进行擦除,橡皮擦的大小及画宅大小相同2.3状态栏状态栏中除了原有的显示外,还加入了硬币的数量以及鼠标的X坐标和y坐标3.功能的实现3.1 视图设计,利用MFC生成画图应用程序框架具体步骤如下:执行VC程序,选择吩咐,弹出New对话框.单击Projects标签,转至JProjects选项卡,选择MFCAPPWiZard(CXe)选项,然后在Projectname文本框中输入MyDraW2_0(原来也做过个,不过并没有以面对对彖的写法去写,这个就当作是我的其次个版本)
7、,文本框是指项目的本地路径。(2)由于本程序是实现画线,要在视图中完成,所以首先创建一个博于单文档的应用程序3.2 编辑资源利用Res。UrCevieW中的Menu编辑器在菜单栏添加菜单,该流程图如下3.2所示:图3.2(2)利用RCSOUrVCViCW中的TOOIBar编辑器,在工具栏中添加自定义控件。控件图案如E所示:/口OA-P-R3.3 编程思路及各个函数的实现(h思路:首先,画定义好的形态。直线、矩形、圆形等等都属于基本的形态,那么我设定一个基类,称它为CShape.给这个基类定义一个画画的虚函数DraW(CDC*pDC),在这个类里面派生出各个须要的类,如CeirdC类,并为这些派
8、生类定义芬自的属性及方法,重写基类的DraW函数。当我须要用到这些类的时候,只须要在VieW类里创建指针,然后调用里面DraW方法。由于是当副标拖动的时候画出所需的图形,须要添加鼠标响应函数,On1.BUUOnDoWn(),On1.BuHOnUP,以及OnMOUSCMOVe()。画画主要是在OnMOuSCMOVC()里实现”接着,是画笔的颜色和大小,原来是想革独创建一个画笔类,定义颜色和大小属性,使CCirde等派生类多继承,在继承个画笔类,但普试了几遍,发觉在菜单里选择颜色时就会使程序停止运行,于是就放弃/重新构思之后,由T画图是在CMyDraW2_0里实现的,就干脆在CMyDraw2.0中
9、定义了颜色和大小的变量,这样也便利。然后是画硬币。并没有为这个创建单独的类,干脆在CMyDmW2_0中的OnDraWO中画硬币,并且在CMyDraw2J)中添加了梢加和削减硬币的方法。工具栏中只要和为各个图标添加函数,作用和菜单栏中的图形一栏中时应即可。最终还有硬币的数员和鼠标坐标放在状态栏中显示,下面起先进行函数代码的实现。(2求码的实现:1为基本形态创建一个基类.命名为CShaPe在ClassVicwz中右键点击MyDraw2.0classcs-ncwclass,在弹出窗11的顶部F拉框中选择GCnCriCClass,如图所示类信息名称同:CShape文件名:Shapc1.cppJE(C)
10、.I基类旧):DerivedFrom胸类的类型:GcnericClass在头文件中添加虚函数DraW(CDC*pDC)public:CShapc();virtualDraW(CDCpDc=():添加的虚函数virtual-CShape();2.基本形态类的创建旌:以矩形、BS形、正五边形、正三边形为点介绍)2.1 矩形类的创建及定义创建个矩形类,维承CShape类,如图ua类的类型:GencricClass三|确定类信息取用名林旧:CRectangle文件名:Rectanglelxpp更改的基类IB):在该类中重新定义画画函数DnIW(),并添加带参数的构造函数,矩形的左上角,以及矩形的宽度和
11、高度,代码如下:Public:CRectangleO;Draw(CDC*=pDC);重新定义Draw函数CPointPOinJ1.CflUp;矩形的左上角坐标CRcctanglc(intx.inty.intw=0.inth=0);带参数的构造函数表示左上角的横坐标,y表示左上角的纵坐标intwidth;矩形的宽度intheight;矩形的高度virtual-CRectangIef);在无参数构造函数中初始化point.1.eftUp的坐标和宽度以及高度的值,代码如下:CRectangleriCRectangleOpint-1.cftUp.x=O;左上角坐标X值设置为OPOin1.1.CftUP
12、.y=0:左上角坐标X值设置为OWidth=O:矩形的宽度初始为Oeight=();矩形的高度初始为O在带参数的构造函数中将值赋给POiniJefiUp和宽度以及高度,代码如下:POin1.1.efWp.x=x;Poini_I.eftUp.y=y;width=w;hcight=h;将传入的X值赋绐左上角坐标的X值将传入的y值赋给左上角坐标的y值将传入的W值赋给width将传入的h值赋给height筑写DraW(CDC*PDC)函数,代码如下:CRcctanglc:Draw(CDC*PDC)(PDC-Reciangle(poini_IWnUP.x,poini.efiUp.y,POin1.l尤ft
13、Up.x+widih,POin1.1.CnUP.y+hcight);利用RCCtangIe。函数画出矩形,其中的值分别为矩形的左上角横坐标,左上角纵坐标.右下角横坐标,右下角纵坐标在CMyDraW2_0View中引入矩形类的头文件:双击CMVDraW2_0VieW,在代码HMyDraw2_()Vicw.h:interfaceoftheCMyDraw2-0Vicwclass/III出IIItIllll用出IMIIIIIlI由H出出MliIlllm出IlIlItIII也H出III#if!dcfincl(AFX_MYDRAV2_0VIEW_H_3809529C_6744_4AD2_80A4_D44683DOA5AF_INC1.UDEDJIefineAFX_MYDRAW2_()VIEW_H_38W529C_6744_4AD2_80A4_D44683D()A5AF_INC1.UDED_下添加如下代码:#includcRcctangle.h并在VieW类中添加