基于MFC的简单画图程序实验

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

简单画图程序

【实验目的】

本实验目的是通过构建基于MFC的windows画图程序,使学生:

(1) 理解MFC应用程序的运行机制

(2) 掌握使用MFC构建Windows应用程序的基本结构及编程的基本方法

(3) 理解和掌握MFC应用程序消息处理机制及应用

(4) 掌握类向导(ClassWizard)的使用

【实验要求】

(1) 必须做好实验原理的预习。

(2) 需要对提供的程序代码进行分析,并明确实验时还应在何处添加哪些语句。

【实验环境】

Microsoft Windows XP

Microsoft Visual C++ 6.0

1 基本功能描述

1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。

2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。

3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。

2 设计思路

1) 对需要用到的变量进行初始化。

2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性。

3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。

4) 选择图形或其它属性,可进行下一次绘制。

图1 程序流程图

3 软件设计

3.1 设计步骤

1)创建单文档

创建一个MFC AppWizard[exe]工程,命名为“yinshuyan”,如图2所示,并创建单文档,如图3所示。创建成功后,系统自动生成相应的类,如图4所示。

图2 创建工程

图3 创建单文档

2)编辑菜单

添加需要的菜单项,如图5所示(可以通过拖动调整菜单的顺序);并在菜单的属性中设定好所对应的ID,如图6所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中

选中分隔符(Separator)选项即可)。

图5 添加菜单项

图6 设置菜单ID

表1 菜单项对应ID

建立类向导,在视图类CyinshuyanView(通过菜单View->ClassWizard,或者快捷键Ctrl+w打开)中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图7所示。

图7 建立类向导【注意:此图有误,Class name的下拉框中,

应选择“CyinshuyanView”而非此图显示的“CMainFrame”】上述操作完成后,可以发现在Class CMainFrame中自动增加了类似OnLine()之类的许多函数,并且在源文件MainFrm.cpp中,自动添加了相应的消息映射。

BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)

//{{AFX_MSG_MAP(CMainFrame)

ON_WM_CREATE()

ON_COMMAND(ID_LINE, OnLine)

……

END_MESSAGE_MAP()

3)创建工具栏

在插入处选择资源(菜单Insert->Resource,或者快捷键Ctrl+R),新建工具栏,如

图8所示;

图8 新建工具栏

在工具栏上添加相应的按钮,在属性处更改其ID,如图9所示。

图9 编辑工具栏

4)在相应消息函数处添加代码,实现其功能

建立类向导,在视图类CyinshuyanView中,添加WM_PAINT消息,以及

WM_LBUTTONDOWN、WM_LBUTTONUP、WM_MOUSEMOVE消息,并在其中添加相应的代码,如图10所示。

图10 添加WM_PAINT消息

3.2 界面设计

各控件名称,类型,属性及相关变量如表2所示。

3.3 关键源代码

1)在“MainFrm.h”中,在class CMainFrame : public CFrameWnd里的protected下定义:

CToolBar m_drawToolBar; //工具栏

2)在“MainFrm.cpp”中,在CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里添加以下代码:

if (!m_drawToolBar.Create(this) ||

!m_drawToolBar.LoadToolBar(IDR_DRAW))

{ TRACE0("Failed to create status bar\n");

return -1;

}

3)在“YinshuyanView.h”中,在class CYinshuyanView : public CView里的public下定义相关变量:

COLORREF m_nColor;

COLORREF m_fColor;

相关文档
最新文档