欢迎来到课桌文档! | 帮助中心 课桌文档-建筑工程资料库
课桌文档
全部分类
  • 党建之窗>
  • 感悟体会>
  • 百家争鸣>
  • 教育整顿>
  • 文笔提升>
  • 热门分类>
  • 计划总结>
  • 致辞演讲>
  • 在线阅读>
  • ImageVerifierCode 换一换
    首页 课桌文档 > 资源分类 > DOCX文档下载  

    mfc简单绘图程序.docx

    • 资源ID:1451013       资源大小:199.57KB        全文页数:40页
    • 资源格式: DOCX        下载积分:5金币
    快捷下载 游客一键下载
    会员登录下载
    三方登录下载: 微信开放平台登录 QQ登录  
    下载资源需要5金币
    邮箱/手机:
    温馨提示:
    用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)
    支付方式: 支付宝    微信支付   
    验证码:   换一换

    加入VIP免费专享
     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    mfc简单绘图程序.docx

    简单的绘图程序王帅书目摘要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 .各基本形态类在CMyDraw2_0类中的调用和绘图的实现203.1 矩形类的调用及及绘图的实现203.2 圆形类的调用243.3 正三角形类的调用253.4 基本类型调用的黑余代码264 .画笔的运用、颜色及大小的调整295 .画硬币356 .工具栏中的自定义控件387 .状态栏中的显示394程序功能的测试41542摘要I本绘图程序能够进行基本图形的绘画,如直线,圆,矩形,三角形等等,并且在此基础上添加了多边形的绘画,如正五边形等.除此之外,还能够进行顺手画,即用M标随意画线条。为了更好的绘图,还添加了对画笔粗细的调整,以及对画笔颜色的调整,除了特定的颜色,颜色还可依据输入的RGB值随意更改。还有一些老师的要求,加入了画硬币、显示硬币数目即鼠标坐标等信息。本程序主要采纳面对对象写法。关键字:程序设计,MFC,绘图1 .引言设计目的本绘图程序的设计不仅仅局限于老师课堂的要求,通过C+的编写实现绘图要求,我还想要在此基础上,加入自己的一些想法,想要更好地了解MFa更好地去实现H己的想法。2 .功能说明2.1 菜单栏图形图形栏中包括直线、矩形、圆形、椭圆、多边形,多边形中包括正三角形、正四边形、正五边形、正六边形。选择直线,可用鼠标拖动画出一条直线选择矩形,可用鼠标推动画出矩形选择圆形,可用就标拖动画出圆形选择椭圆,可用鼠标拖动画出椭圆选择正三角形,可用鼠标拖动画出正三角形选择正四边形,可用鼠标拖动画出正方形选择正五边形,可用鼠标拖动画出正五边形选择正六边形,可用鼠标拖动画出正六边形t注:为了验证自己的想法以及想让画出的图形随意地变换方向,特意在正三角形一项中加入了旋转效果,使鼠标在推动时能旋转三角形)画笔画箔栏中包括颜色、大小及铅笔(D颜色颜色中包括黑色、红色、绿色、蓝色、橙色、黄色、吉色、紫色、粉色、自定义选择黑色,画出的图形将为黑色选择红色,画出的图形将为红色选择绿色,画出的图形将为绿色选择橙色,画出的图形将为橙色选择黄色,画出的图形将为黄色选择音色,画出的图形将为青色选择紫色,画出的图形将为紫色选择粉色,画出的图形将为粉色选择自定义,可输入RGB值,画出的图形将显示输入的颜色(2)大小大小中包括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,可用鼠标拖动画出正三角形选择二二,可用鼠标进行顺手画选择+,可在窗口画出硬币后,将硬币数量+1选择一,可在窗口画出硬币后,将硬币数增-1选择Q,可利用鼠标对所绘图形进行擦除,橡皮擦的大小及画宅大小相同2.3状态栏状态栏中除了原有的显示外,还加入了硬币的数量以及鼠标的X坐标和y坐标3.功能的实现3.1 视图设计,利用MFC生成画图应用程序框架具体步骤如下:执行VC程序,选择吩咐,弹出New对话框.单击Projects标签,转至JProjects选项卡,选择MFCAPPWiZard(CXe)选项,然后在Projectname文本框中输入MyDraW2_0(原来也做过个,不过并没有以面对对彖的写法去写,这个就当作是我的其次个版本),文本框是指项目的本地路径。(2)由于本程序是实现画线,要在视图中完成,所以首先创建一个博于单文档的应用程序3.2 编辑资源利用Res。UrCevieW中的Menu编辑器在菜单栏添加菜单,该流程图如下3.2所示:图3.2(2)利用RCSOUrVCViCW中的TOOIBar编辑器,在工具栏中添加自定义控件。控件图案如E所示:/口OA-P-R3.3 编程思路及各个函数的实现(h思路:首先,画定义好的形态。直线、矩形、圆形等等都属于基本的形态,那么我设定一个基类,称它为CShape.给这个基类定义一个画画的虚函数DraW(CDC*pDC),在这个类里面派生出各个须要的类,如CeirdC类,并为这些派生类定义芬自的属性及方法,重写基类的DraW函数。当我须要用到这些类的时候,只须要在VieW类里创建指针,然后调用里面DraW方法。由于是当副标拖动的时候画出所需的图形,须要添加鼠标响应函数,On1.BUUOnDoWn(),On1.BuHOnUP,以及OnMOUSCMOVe()。画画主要是在OnMOuSCMOVC()里实现”接着,是画笔的颜色和大小,原来是想革独创建一个画笔类,定义颜色和大小属性,使CCirde等派生类多继承,在继承个画笔类,但普试了几遍,发觉在菜单里选择颜色时就会使程序停止运行,于是就放弃/重新构思之后,由T画图是在CMyDraW2_0里实现的,就干脆在CMyDraw2.0中定义了颜色和大小的变量,这样也便利。然后是画硬币。并没有为这个创建单独的类,干脆在CMyDmW2_0中的OnDraWO中画硬币,并且在CMyDraw2J)中添加了梢加和削减硬币的方法。工具栏中只要和为各个图标添加函数,作用和菜单栏中的图形一栏中时应即可。最终还有硬币的数员和鼠标坐标放在状态栏中显示,下面起先进行函数代码的实现。(2求码的实现:1为基本形态创建一个基类.命名为CShaPe在ClassVicwz中右键点击MyDraw2.0classcs->ncwclass,在弹出窗11的顶部F拉框中选择GCnCriCClass,如图所示类信息名称同:CShape文件名:Shapc1.cppJE(C).I基类旧):DerivedFrom胸类的类型:GcnericClass在头文件中添加虚函数DraW(CDC*pDC)public:CShapc();virtualDraW(CDC"pDc>=():添加的虚函数virtual-CShape();2 .基本形态类的创建旌:以矩形、BS形、正五边形、正三边形为点介绍)2.1 矩形类的创建及定义创建个矩形类,维承CShape类,如图ua类的类型:GencricClass三|确定类信息取用名林旧:CRectangle文件名:Rectanglelxpp更改的基类IB):在该类中重新定义画画函数DnIW(),并添加带参数的构造函数,矩形的左上角,以及矩形的宽度和高度,代码如下: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.y=0:左上角坐标X值设置为OWidth=O:矩形的宽度初始为O>eight=();矩形的高度初始为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尤ftUp.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!dcfinc<l(AFX_MYDRAV2_0VIEW_H_3809529C_6744_4AD2_80A4_D44683DOA5AF_INC1.UDEDJIefineAFX_MYDRAW2_()VIEW_H_38W529C_6744_4AD2_80A4_D44683D()A5AF_INC1.UDED_下添加如下代码:#includc"Rcctangle.h"并在VieW类中添加私有成员变星,创建矩形类的指针:右键点击CMyDraW2_0Viev,选择AddMemberVariable,在弹出的对话框中如下输入:添加成员变星变号类型由:I取消ICRectanIge*-IrectangleAccessPublicCProtected(Private将在CMyDraw2J)View头文件中出现如下代码Private:CRcctangIe"rectangle:定义指向矩形类的指针,为私有变盘2.2 Ia形类的创建及定义创建一个圆形类,命名为CCirCM继承CShaPC类,在该类中添加公有成员变量,代码如下:public:CCirclc();CCircle(intx.inty.intradius=0);带参数的构造函数,其中,X表示捌心的X(ft,y表示圆心的y(,radius表示圆的半径Draw(CDC*pDC);重新定义DmW函数virtualCCircle():intRadius;定义IGl的半径CPointccntcr_point;定义圆的中心点在无参数的构造函数中初始化变量值,代码如下:CCircIe:CCircle()center_pointx=0;圆心的横坐标初始为0CenteJPoint.y=0;川网心的纵坐标初始为ORadius=O;圆的半径初始为。在带参数的构造函数中将传入的值赋给各变量,代码如下:CCirde:CCirCle(inix,inty,ir11radius)CCntejPOinI.x=x;Center_poiin.y=y;Radius=radius;重写定义的Draw函数,代码如下:将传入的X值赋给圆心的横坐标将传入的y值赋给圆心的纵坐标将传入的radius值赋给圆的半径CCircIe:Draw(CDC*pDC)pDC->Ellipsc(ccntcr_point.x-Radius.ccntcr_point.y-Radius.ccnter_pOin1.X+Radius,center-POinI.y+Radius);利用EHiPSeo函数进行圆的绘制,其中的值分别为圆的外接正方形的左上角横坐标、纵坐标,右下角横坐标、纵坐标在CMyDraW2_0VieW中引入圆形类的头文件:/include-Circlc.h"添加私有成员变量,创建圆形类的指针变量:CCirCIe"circle:创建制形类的指针,可以干脆写在矩形类只针对下方2.3 正五边形类的创建及定义创建,个正五边形类,命名为CPenIangle,维承CShaPe类,在该类中添加公有成m变量,代码如下:public:CPcntanglcO;CPentangIe(intx,iniy,intradius=。)/带参数的构造函数,X为外接圆圆心的横坐标,y为外接圆圆心的纵坐标,11iius为外接圆的半径intRadius;定义外接圆半径CPointcP:定义外接圆圆心Draw(CDC*pDC);重新定义Draw函数virtual*-CPentangle();在无参数的构造函数中初始化备变量,代码如下:CPeniangle:CPentangle()cP.x=0;圆心横器标初始为OCPJ=0:圆心纵坐标初始为ORadius=O;外接圆半径初始为O在带参数的构造函数中将传入的值赋给各变量,代码如下:CPCnlangIc:CPCnIangIC(intx,inly,inlradius)cPx=x:将传入的X值赋给圆心的横坐标cP.y=y;将传入的y值赋给圆心的纵坐标RadiUS=radius;将花入的radius值赋给外接圆半径下面重写的Draw函数及前两个不同,须要用到数学函数COM)以及sin(),由于两个函数用的是弧度制,还需引入数学变址P1.为了能够于当的写入这些函数,须要在CPcntangIe类的客户端中引入数学类的头文件:双击QaSWieW中的CPemangIeO,在出现的构造函数上方,在如下代码/Pcntanglcxpp:implementationoftheCPcntangIcclass./IlllIlHf""""IIlIIllIlIi""IlHllflllivillMlMlIIIIIIf""""#includc"stdafx.h"include-MyDaw2-0.h"#inelude"Pet11angle.h"下添加数学类头文件:#includc,math.h*再定义个宏变量Pl,添加如下代码:ffdefinePl3.1415926起先重写D11v(CDC*pDC)函数,代码如卜:CPenUHlgle:DraW(CDC*DC)(doublerc=Radiuscos(36*PI/180);将半径和36度的余弦值相乘并Jl赋给新的变量rcdoublers=Radius4sin(36*PIl80);将半径和36度的正弦值相乘并且赋给新的变量rsdoubleRc=Radius*cos(l8*PIl80);将半径和18度的余弦值相乘并且赋给新的变量:RCdoubleRx=Radius*sin(18*=PI180);将半径和18度的正弦值相乘并且赋给新的变量RsPOINTpts=cP.x+rs.cP.y+rc,cP.x-rs.cP.y+rc,cP.x-Rc.cP.y-Rs).cP.x.cP.y-Radius.cl>.x+Rc.cP.y-Rs11:利用点类的数组将五个点储存在点数组pis'1'pDC->Polygon(pts.5);利用函数Polygono进行多边形的绘画,其中pts为储存的点,5为点的个数下而对Draw函数中各数据进行深层次的分析,表明它们的来历:36以外接圆圆心为坐标轴中心,设该点的坐标为(cPx,cP.y);则右卜角的+标为cP.x+R*sin(36*Pll80),cP.y+R*cos(36*Pl180)按顺时针方向看,接下去的几个点的坐标分别为cP.x-R*sin(36*PI180),cP.y+R*cos(36*PI180)cP.x-R*cos(l8*PU180).cP.y-Rsin(l8*PI180)cP.,cP.y-RcPx+R*cos(I8*PI180).cP.y-R*sin(l8*PI180)以上为正五边形5个点的来历,接下来在CMyDraW2_0VieW中引入正五边形类的头文件:#include4Tcntangle.hM添加个私有变量,创建指向正五边形的指针变量:CPentangIe*pentangle:2.4 正三角形类的创建及定义,这个类中添加了旋转)创建一个正三角形类,命名为CDdIa,继承CShaPC类,在该类中添加公有成员变量,代码如卜public:CDelta();CDclta(intx,inty,intradius=。);带参数的构造函数,其中X为外接圆圆心的横坐标,y为外接圆圆心的纵坐标,11idius为外接圆半径intRadiUs;外接圆半径CPoinlcp;外接圆圆心doubletheta:在正三角形原图上旋转过的角度doublest;该变这储存的是sin(theta)doublect;该变量储存的事cos(theta)Dnw(CDC*pDC);重:新定义DraW函数virtual-CDelta();在无参数构造函数中初始化变量,代码如下:CDel(a:CDeItao(cp.x=0:圆心的横坐标初始为0cpy=O;圆心的纵坐标初始为0Radius=O;外接圆半径初始为0在带参数构造函数中将传入的值赋给各变量,代码如卜:CDelta-CDelta(intx.inty.intradius)(cp.x=x;将传入的X值赋给圆心的横坐标cp.y=y;将传入的y值赋给圆心的纵眼标RadiUS=radius;将传入的radius值赋给外接网半径c=l;调用该函数时将CoS(Ihela)设置为1st=O;调用该函数时符Sin(IhCla)设置为0)及正五边形相同,要引入数学类的头文件以及定义宏变出PI,/include"math"#dcfincPI3.1415926起先重写定义的DraW(CDC*pDC)函数,代码如下:CDeIta:Draw(CDC*pDC)doublerc=Radis*cos(60*PI80);外接圆半径及60度余弦值相乘后赋给rcdoublers=Radius*sin(W)*Pll8();外接圆半径及M)度正弦值相乘后赋给rsCt=CoS(theta);/7将theta的余弦值赋给CtSt=Sin(Ihcta):将theta的正弦值赋给stPolNTdX1.dXlI;定义两个点(接下来会具体说明)POlNTdX2,dx22;同上POlNTdX3,dx33;同上dxl.x=cp.x-cp.x;dxI.y=cp.y-Radius-cp.y;dx1l.x=dx1.x*ct-dx1.y*st+cp.x;dx11.y=dxI.y*ci+<lxI.x*sl+cp.y;dx2.x=cp.x-rs-cp.x;dx2.y=<p.y+rc-cp.y;<lx22.x=dx2.x*ct-<lx2.y*st+cp.x:dx22.y=dx2.y*ct+dx2.x*st+cp.y:dx3.x=cp.x+rs-cp.x;dx3.y=cp.y+rc-vp.y;dx33.x=dx3.x*ctdx3.y*st+cp.x;dx33.y=dx3.y*ct+dx3.x*st+cp.y;POINTpts=dx11.x,dx11.y.dx22.x,dx22.y),dx33.x.dx33.yJ)½义点数组,存储正三角形的三个点pDC->Polygon(pls,3)W利用画多边形的函数POlygon()画IE三角形,PlS为储存的三个点.3为点的个数J接下来对Draw函数里的变盘以及运算进行说明:如图所示,正三角形的中心到各顶点的距离为半径,设中心点的坐标为(cp.x.q).y)./则可得到右下角的+标为/cp.x+R*sin(60*PIl80),cp.y+R*cos(60*PIl80)/按顺时针方向,接下来两个点的坐标分别为/cp.x-R*sin(60*PIl80),cp.y-R*cos(60*PIl80)/cp.x.cp.x-R1此时,我们得到/W个顶点的坐标,假如按这:个点的坐标画图,就会得到如图所示的三角形,在此基础上,不妨设此图形逆时针转过的角度为,有以卜一原理作为基础:设个点的坐标为(X1.y1),它绕另个点(x2.y2)旋转。角,得到新的点的坐标为:x=(x1-x2)*cos6>-(yI-y2)*sin0+x2;y=(yl-y2)*cos+(x1-x2)*sin+y2:明显,只需得到三个点绕中心旋转后各自的新坐标,我们就可以依据旋转的。角得到新的正角形在Drav(CDC*pDC)函数中,。用theta来代杵,以右卜角顶点为例,原坐标为cp.x+rs.cp.y+rc按如下代码将COS(IheIa)和Sin(Ihela)替换:Ct=CoS(IhCla);st=sin(thcta);用dx3x储存该点及中心点横坐标的差dx3.y储存该点及中心点纵坐标的差,如下:dx3.x=cp.x+11i-cp.x:dx3.y=cp.y+rc-cp.y:用dx33储存该点旋转后得到的新的坐标:dx33.x=dx3.x*ct-dx3.y*st+cp.x;dx33.y=dx3.y*ct+dx3.x*st+cp.y:这样就得到了该点旋转后的坐标,其它两点按同样方法即可得到新坐标,dx22为左卜角的新坐标,dxll为正上方的新坐标接下来,在CMyDraW2_0VieW的头文件中引入正三角形类,的ndudc4<Dclta.hM添加私有变量,创建正三角形类的指针变量:CDeIta*delta:接下来我干脆给出剩下基本形态类的代码(只在当中作注秆,不再具体说明)2.5 椭圆类的创建和定义创建名为CEHiPW的类,继承CShaPe在该头文件中添加如下代码:classCEIIipsc:publicCShapcpublic:CEIIiPSe();CEIIipsc(intx,inly,intw=0.imh=0);带参数的构造函数,值分别为外接矩形左上角的横曲标、纵坐标、宽度、高度intWidIh:外接矩形的宽度intheight;外接矩形的高度CPointCCnICjPOinl;椭圆中心点DraW(CDC«pDC):/潼新定义Draw函数virtualCEllipse();;在该类app中添加如下代码:CEIIipse:CEIlipsc()CeIMer-POin1.X=0;"将中心点横坐标初始为0Cenler-POint.y=0;将中心点纵坐标初始为OWidth=O;"将外接矩形宽度初始为0hcight=O:将外接矩形高度初始为0ICEIIiPse:CEHiPSe(inix.inty.intw.inth)(ccntcr-point.x=x;/符传入的x值赋给中心点的横坐标centcr_point.y=y:将传入的y值赋给中心点的纵坐标vidth=w;将传入的w值赋给宽度heigh=h;将传入的h值赋给高度CElliPSc:DraW(CDC«pDC)IpIX>Ellipse(center_point.x-width,center_point.y-height,cCnICJpOint.x+widih,centcjpoinl.y+hcight);利用ElliPsC()函数画椭圆1在CMyDraW2_0VieW的头文件中引入椭圆类,#includc“Ellipseh'添加私有变量,创建椭圆类的指针变量:CEIlipse*ellipse;2.6 正四边形类的创建及定义命名为CQUadiangle,头文件中添加如卜代码:public:CQuadrangleO;CQUUdrangIC(inix.inty.intradis=O);带参数的构造函数,参数分别为中心点的横册标、纵眼标、外接网半径intRadius:外接I网半径CPointCPOin1;中心点Draw(CDC*pDC);重新定义Dniw函数virtual-CQuadrangIeO;在该类app中添加如下代码:CQuadrangIe-CQuadrangIcOCPOirU.x=0;将中心点的横坐标初始为0cPoint.y=0;将中心点的纵坐标初始为0Radius=O;将外接网的半径初始为0CQuadranglc:CQuadninglc(inix,inty,intradius)(CPoint.x=x:将传入的X值赋给中心点的横坐标cPcini.y=y;格传入的y值赋给中心点的纵坐标RUdiuS=radius;将传入的radius,给外接圆半径CQuadrangle:Draw(CDCtpDC)(doubleRC=RadiUs*cos(45*PW80);将半径及45度余弦值的乘积赋给RcPOINTpts11=cPoint.x+Rc,cPoini.y÷Rc,cPoint.x+Rc,cPoint.y-Rc,(cPoint.x-Rc,cPoint.y-Rc,cPoinix-Rc.cPoint.y+Sc;定义点数组,储存四个顶点PDC->Polygon(pts.4)W利用多边形绘画函数画正四边形I在CMyDraW2_0VieW的头文件中引入正四边形类,#includc"Quadrangleh''添加私有变量,创建正四边形类的指针变量:CQuadrangle"quadrangle:2.7 正六边形的创建及定义命名为CRegUlarHCXagon,头文件中添加如卜代码:public:CQuadrangleO;CQuadrangle(in(x,inty,intradius=O):带参数的构造函数,参数分别为中心点的横限标、纵坐标、外接圆半径intRadiUSW外接一半径CPoinICPOimW中心点DraW(CDC*pDC);重新定义DrUw函数virtual-CQuadrangIcO;在该类app中添加如下代码:CRegularIIexagon:CRegularllexagon()cpx=O:将中心点的横册标初始为0cp.y=();将中心点的纵坐标初始为0RadiUS=0;将外接IGI的半径初始为()CReguIarIlexagon:CRegularllexagon(intx,ir11y,inradius)(cpx=x;将传入的X值赋给中心点的横坐标cp.y=y:/将传入的y值赋给中心点的纵坐标RadiUS=mdiuW4传入的radius值赋给外接圆半径)CRegularHexagon:Draw(C1.X?*PDC)(doublers=RMius*$in(30*PI/180);“将半径及30度正弦值的乘积赋给rsdoublerc=Radius*cos(30*Pl180);“将半径及30度余弦位的乘枳赋给rcdoubleRS=RUdiuS*sin(60*PIl80);/保J半径及60度正弦值的乘积赋给RsdoubleRc=RadiUS*cos(60*PI/180)W将半径及60度余弦值的乘积赋给RePOINTpts11=cp.x+rs.cp.y+rc)4cp.x-rs.cp.y+rc.cp.x-Radius.cp.y.cp.x-Rc.cp.y-Rs.cp.x+Rc.cp.y-Rs).(cp.x+Radius.cp.y11:定义点数组pis,储存正六边形的六个顶点PDC->Polygon(pts6)W利用多边形绘画函数画出正六边形)在CM,DraW2_0VieW的头文件中引入正六边形类,#invlude"RcguIarHcxagonh'添加私有变量,创建正六边形类的指针变量:CRegu1arHexagon*regulariiexagon:2.8 宜线类的创建及定义命名为C1.ine,在头文件中添加如卜.代码:public:C1.ine();C1.ine(intsx,inisy,intcx=O.intCV=O)H带参数的构造函数,分别为直线起点的横坐标、纵坐标,终点的横坐标、纵坐标DraW(CDC*PDC);重新定义DraW函数CPointP-SIart;定义直线起点CPointp_cnd:定义直线终点virtualY1.ine():在该类app中添加如下代码:C1.incriC1.incO(p_siart.N=();将起点横坐标初始为0P-SIar1.y=将起点纵坐标初始为0p_Cnd.x=O0将终点横坐标初始为0p_end.y=0;将终点纵坐标初始为0JC1.inC:C1.inC(inisx,intsy,intex,inicy)(p_start.x=sx;将sx的值赋给起点的横坐标p_zar.y=sy;将sy的值赋给起点的纵坐标p_cnd.x=cx:/将ex的值赋给终点的横坐标p_cnd.y=eyW将ey的值赋给终点的纵坐标)C1.ine:DraW(CDC名DC)(PDC->MoveT”p_Starow利用MOVCToO函数画出直线起点pDC:->I.ineTo(p_end);/利用1.meToo函数从起点询直线到终点)在CMyDraw2J)View的头文件中引入直线类,include“1.ine.h"添加私有变量,创建直线类的指针变故:C1.inc*line:3 .各基本形态类在CMyDnlW2_OVieW类中的调用及触图的实现(注:以矩形、圆形、正三角形为重点介绍)3.1 矩形类的调用及及绘图的实现绘图的过程是:以标左键按下A鼠标移动,鼠标左键弹起在此,引入反标的三个响应函数,分别对应当三个过程:按下cd+w.弹出如图所示对话框,并按加图悚作,取消MFCClawV<zardMessageMepsMemberVariablesAutomationActiveXEVenl8ClsInto刎。“CIEname:AddqEMyDraW2_0二CMyDraw2_UViewDMyOraw?_OView.kD.My0rw2JJVieW.cppOt>ectOs:Messages:DeleteFunctionWM1.buhondblclkEdHCade.ID_ADD_COINIDAPP_A80UTID_APP_EXTF0,0RAWCIRC1.EID_DRAW_DE1.TAID_ORAW_1.INEMemberfunctions:.WMIBUTToNDOWNWM1.butionupWM.MOUSEMOVEWMmousewheelVVM_MOVEWMPAJNTWOnDraw1.ineONJD_OriAW_1.INEXOMMANDWOnDrawfUctengIeONJD_DfIAW_REClANG1.tX0MMAN0VOnEndPrIntIngWOeErgCrONDjRASR:COMM1.AND.11On1.BuHonDown0N-WM,1.BU110ND0WNDescription:IndicateswhenIeltmousebuttonispressed确定选择右Wl的AddFUnCtiOn(本应是粥色,由于已添加,变为灰色),将三个响应函数添加到CMyDraW2_0VieW类app中。现在,须要告知夙标,当鼠标左键按下时起先进行绘画,那么,须要添加一个变量,告知鼠标是否进行绘画:为VieW类添加私有成员变量:boolinDown;在View类的构造函数中对该值进行初始化,代码如下:CMyDraw2_OVicw:CMyDraw2_OVicw()(/TODO:addconstructioncodeheremDown=falscW将11Down初始为false,表示默认为不进行绘画)在鼠标左键按下的响应函数中添加如下代码:VoidCMyDraW2_0Vicv::On1.BUuonDovn(UlNTnFlags,CPointpoint)mDown=true:将mDown标记为true.表示此时即将起先绘画在副标左键弹起的响应函数中添加如下代码:voidCMyDraw2_()View:On1.But(on

    注意事项

    本文(mfc简单绘图程序.docx)为本站会员(夺命阿水)主动上传,课桌文档仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知课桌文档(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    备案号:宁ICP备20000045号-1

    经营许可证:宁B2-20210002

    宁公网安备 64010402000986号

    课桌文档
    收起
    展开