mfc简单绘图程序

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 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();

相关文档
最新文档