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

上传人:鲁** 文档编号:502750409 上传时间:2023-05-04 格式:DOC 页数:16 大小:646.50KB
返回 下载 相关 举报
基于MFC的简单画图程序实验_第1页
第1页 / 共16页
基于MFC的简单画图程序实验_第2页
第2页 / 共16页
基于MFC的简单画图程序实验_第3页
第3页 / 共16页
基于MFC的简单画图程序实验_第4页
第4页 / 共16页
基于MFC的简单画图程序实验_第5页
第5页 / 共16页
点击查看更多>>
资源描述

《基于MFC的简单画图程序实验》由会员分享,可在线阅读,更多相关《基于MFC的简单画图程序实验(16页珍藏版)》请在金锄头文库上搜索。

1、简单画图程序【实验目的】本实验目的是通过构建基于MFC的windows画图程序,使学生:(1) 理解MFC应用程序的运行机制(2) 掌握使用MFC构建Windows应用程序的基本结构及编程的基本方法(3) 理解和掌握MFC应用程序消息处理机制及应用(4) 掌握类向导(ClassWizard)的使用【实验要求】(1) 必须做好实验原理的预习.(2) 需要对提供的程序代码进行分析,并明确实验时还应在何处添加哪些语句。【实验环境】Microsoft Windows XPMicrosoft Visual C+ 6.01 基本功能描述1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜

2、单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形。 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕。3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。2 设计思路 1) 对需要用到的变量进行初始化。2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值。选择

3、不同的线宽,线色与填充色,即可改变画笔或画刷的属性。3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形。4) 选择图形或其它属性,可进行下一次绘制。开始 定义并初始化变shape 线色m_ncolor 填充色 m_fcolor 画笔pen画刷brush绘图起点opoint绘图终点cpoint选择线宽默认值(w=1)改变画笔属性选择线色默认值(黑色)改变画笔属性选择填充色默认值(黑色)改变画刷属性椭圆矩形直线响应函数OnElli

4、pse()shape=3响应函数OnLine()shape=1响应函数OnRect()shape=2鼠标左键按下 响应函数OnLButtonDown()opoint=point鼠标移动 响应函数OnMouseMove()epoint=point响应OnPaint(),绘制图形鼠标左键弹起响应函数OnLButtonUp()刷新,得到图形结束图1 程序流程图3 软件设计3。1 设计步骤1)创建单文档创建一个MFC AppWizardexe工程,命名为“yinshuyan,如图2所示,并创建单文档,如图3所示.创建成功后,系统自动生成相应的类,如图4所示。图2 创建工程图3 创建单文档图4 生成类2

5、) 编辑菜单添加需要的菜单项,如图5所示(可以通过拖动调整菜单的顺序);并在菜单的属性中设定好所对应的ID,如图6所示,各项菜单对应的ID如表1所示(其中线宽菜单为弹出菜单,只需在菜单项目属性中的弹出选项前打勾即可,分隔线亦只需在菜单项目属性中选中分隔符(Separator)选项即可)。图5 添加菜单项图6 设置菜单ID表1 菜单项对应ID菜单名ID菜单名ID直线ID_LINE线宽1ID_W1矩形ID_RECT线宽2ID_W2椭圆ID_ELLIPSE线宽3ID_W3颜色ID_COLOR线宽4ID_W4填充色ID_FILLCOLOR线宽5ID_W5建立类向导,在视图类CyinshuyanView

6、(通过菜单View-ClassWizard,或者快捷键Ctrl+w打开)中,对各菜单项添加对应的COMMAND消息处理函数,部分菜单项还添加对应的UPDATE_COMMAND_UI消息函数,如图7所示。图7 建立类向导【注意:此图有误,Class name的下拉框中,应选择“CyinshuyanView”而非此图显示的“CMainFrame 】上述操作完成后,可以发现在Class CMainFrame中自动增加了类似OnLine()之类的许多函数,并且在源文件MainFrm。cpp中,自动添加了相应的消息映射。BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd)/A

7、FX_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消息,并在其中添加相应的代码,

8、如图10所示.图10 添加WM_PAINT消息3.2 界面设计各控件名称,类型,属性及相关变量如表2所示。 表2 界面控件表控件名称控件类型属性相关变量绘图下拉式菜单 无 无 直线菜单项工具栏按钮ID_LINEint shape矩形菜单项工具栏按钮ID_RECTint shape椭圆菜单项 工具栏按钮ID_ELLIPSEint shape线宽弹出式菜单 无int w颜色(线色)菜单项工具栏按钮ID_COLORCOLORREF m_nColor填充色菜单项工具栏按钮ID_FILLCOLORCOLORREF m_fColor 3。3 关键源代码1) 在“MainFrm。h中,在class CMai

9、nFrame : 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 barn);return 1; 3)在“YinshuyanView。h”中,在class CYinshuya

10、nView : public CView里的public下定义相关变量:COLORREF m_nColor;COLORREF m_fColor;CPoint cpoint; CPoint opoint;BOOL m_Down;int w;int shape; 4)在“YinshuyanView。cpp”中,添加如下函数及代码: CYinshuyanView: CYinshuyanView() w=1; /初始线宽默认为1 shape=0; void CYinshuyanView::OnW1() w=1; /令线宽为1void CYinshuyanView:OnW2() w=2; /令线宽为2v

11、oid CYinshuyan::OnW3() w=3; /令线宽为3void CYinshuyanView:OnW4() w=4; /令线宽为4void CYinshuyanView::OnW5() w=5; /令线宽为5void CYinshuyanView::OnUpdateW1(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=1); /当线宽为1时,此选项前标有圆点void CYinshuyanView:OnUpdateW2(CCmdUI pCmdUI) pCmdUISetRadio(w=2); /当线宽为2时,此选项前标有圆点void CYinshuyanView:

12、:OnUpdateW3(CCmdUI pCmdUI) pCmdUISetRadio(w=3); /当线宽为3时,此选项前标有圆点void CYinshuyanView::OnUpdateW4(CCmdUI* pCmdUI) pCmdUISetRadio(w=4); void CYinshuyanView::OnUpdateW5(CCmdUI* pCmdUI) pCmdUI-SetRadio(w=5);void CYinshuyanView:OnLine() shape=1; /选择直线,则令shape为1void CYinshuyanView:OnRect() shape=2; /选择矩形,则

13、令shape为2void CYinshuyanView::OnEllipse() shape=3; /选择椭圆,则令shape为3void CYinshuyanView:OnUpdateLine(CCmdUI* pCmdUI) pCmdUISetCheck(shape=1); /shape为1时,直线选项前打上勾void CYinshuyanView::OnUpdateRect(CCmdUI* pCmdUI) pCmdUISetCheck(shape=2); /shape为2时,矩形选项前打上勾void CYinshuyanView:OnUpdateEllipse(CCmdUI* pCmdUI) pCmdUISetCheck(shape=3); /shape为3时,椭圆选项前打上勾void CYinshuyanView:OnColor() CColorD

展开阅读全文
相关资源
相关搜索

当前位置:首页 > 办公文档 > 解决方案

电脑版 |金锄头文库版权所有
经营许可证:蜀ICP备13022795号 | 川公网安备 51140202000112号