mfc简单绘图程序
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
M F C
简
单
的
绘
图
程
序
——王
帅
目录
摘要 (2)
关键字 (2)
No table of contents entries found.
摘要:
本绘图程序能够进行基本图形的绘画,如直线,圆,矩形,三角
形等等,并且在此基础上添加了多边形的绘画,如正五边形等。除此
之外,还能够进行随手画,即用鼠标随意画线条。为了更好的绘图,
还添加了对画笔粗细的调整,以及对画笔颜色的调整,除了特定的颜
色,颜色还可根据输入的RGB值随意更改。还有一些老师的要求,加
入了画硬币、显示硬币数目即鼠标坐标等信息。本程序主要采用面向
对象写法。
关键字:程序设计,MFC,绘图
1.引言
设计目的
本绘图程序的设计不仅仅局限于老师课堂的要求,通过C++的编写实现绘图要求,我还想要在此基础上,加入自己的一些想法,想要更好地了解MFC,更好地去实现自己的想法。
2.功能说明
2.1菜单栏
2.1.1图形
图形栏中包括直线、矩形、圆形、椭圆、多边形,多边形中包括正三角形、正四边形、正五边形、正六边形。
①选择直线,可用鼠标拖动画出一条直线
②选择矩形,可用鼠标拖动画出矩形
③选择圆形,可用鼠标拖动画出圆形
④选择椭圆,可用鼠标拖动画出椭圆
⑤选择正三角形,可用鼠标拖动画出正三角形
⑥选择正四边形,可用鼠标拖动画出正方形
⑦选择正五边形,可用鼠标拖动画出正五边形
⑧选择正六边形,可用鼠标拖动画出正六边形
(注:为了验证自己的想法以及想让画出的图形随意地变换方向,特意在正三角形一项中加入了旋转效果,使鼠标在拖动时能旋转三角形)
2.1.2画笔
画笔栏中包括颜色、大小及铅笔
(1)颜色
颜色中包括黑色、红色、绿色、蓝色、橙色、黄色、青色、紫色、粉色、自定义
①选择黑色,画出的图形将为黑色
②选择红色,画出的图形将为红色
③选择绿色,画出的图形将为绿色
④选择橙色,画出的图形将为橙色
⑤选择黄色,画出的图形将为黄色
⑥选择青色,画出的图形将为青色
⑦选择紫色,画出的图形将为紫色
⑧选择粉色,画出的图形将为粉色
⑨选择自定义,可输入RGB值,画出的图形将显示输入的颜色
(2)大小
大小中包括1、2、3、4、5、6、7
①选择1,画笔大小设为1
②选择2,画笔大小设为2
③选择3,画笔大小设为3
④选择4,画笔大小设为4
⑤选择5,画笔大小设为5
⑥选择6,画笔大小设为6
⑦选择7,画笔大小设为7
(3)铅笔
选中铅笔后,将可以用鼠标进行随意画线
2.1.3画硬币
画硬币中包括画、增加、减少、清除
①选择画,将在客户端窗口中画出初始数量为10的硬币
②选择增加,窗口中的硬币数目将增加1个
③选择减少,窗口中的硬币数目将减少1个
④选择清除,刷新窗口,将硬币消去
2.2工具栏
工具栏中除了原有的图标外,还加入了自定义的图标
①选择,可用鼠标拖动画出一条直线
②选择,可用鼠标拖动画出矩形
③选择,可用鼠标拖动画出圆形
④选择,可用鼠标拖动画出正三角形
⑤选择,可用鼠标进行随手画
⑥选择,可在窗口画出硬币后,将硬币数量+1
⑦选择,可在窗口画出硬币后,将硬币数量-1
⑧选择,可利用鼠标对所绘图形进行擦除,橡皮擦的大小与画笔大小相同
2.3状态栏
状态栏中除了原有的显示外,还加入了硬币的数量以及鼠标的x坐标和y坐标
3.功能的实现
3.1视图设计
利用MFC 生成画图应用程序框架具体步骤如下:
(1)执行VC程序,选择File|New命令,弹出New对话框.单击Projects标签,转到Projects选项卡,选择MFC AppWizard(exe)选项,然后在Project name 文本框中输入MyDraw2_0(原来也做过一个,不过并没有以面向对象的写法去写,这个就当作是我的第二个版本),文本框是指项目的本地路径。
(2)由于本程序是实现画线,要在视图中完成,所以首先创建一个基于单文档的应用程序
3.2编辑资源
(1)利用ResourceView中的Menu编辑器在菜单栏添加菜单,该流程图如下3.2所示:
图3.2
(2)利用ResourceView中的ToolBar编辑器,在工具栏中添加自定义控件。控件图案如下所示:
3.3编程思路及各个函数的实现
(1)思路:
首先,画定义好的形状。直线、矩形、圆形等等都属于基本的形状,那么我设定一个基类,称它为CShape,给这个基类定义一个画画的虚函数Draw(CDC
*pDC),在这个类里面派生出各个需要的类,如CCircle类,并为这些派生类定
义各自的属性及方法,重写基类的Draw函数。当我需要用到这些类的时候,只需要在View类里创建指针,然后调用里面Draw方法。由于是当鼠标拖动的时候画出所需的图形,需要添加鼠标响应函数,onLButtonDown(),onLButtonUp,以及onMouseMove()。画画主要是在onMouseMove()里实现。
接着,是画笔的颜色和大小,本来是想单独创建一个画笔类,定义颜色和大小属性,使CCircle等派生类多继承,在继承一个画笔类,但尝试了几遍,发现在菜单里选择颜色时就会使程序停止运行,于是就放弃了。重新构思之后,由于画图是在CMyDraw2_0里实现的,就直接在CMyDraw2_0中定义了颜色和大小的变量,这样也方便。
然后是画硬币。并没有为这个创建单独的类,直接在CMyDraw2_0中的OnDraw()中画硬币,并且在CMyDraw2_0中添加了增加和减少硬币的方法。
工具栏中只要和为各个图标添加函数,作用和菜单栏中的图形一栏中对应即可。
最后还有硬币的数量和鼠标坐标放在状态栏中显示,下面开始进行函数代码的实现。
(2)代码的实现:
1.为基本形状创建一个基类,命名为CShape。
在ClassViewz中右键点击MyDraw2_0 classes->new class,在弹出窗口的顶部下拉框中选择Generic Class,如图所示
在头文件中添加虚函数Draw(CDC *pDC)
public:
CShape();
virtual Draw(CDC* pDc)=0;//添加的虚函数
virtual ~CShape();