好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

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

10页
  • 卖家[上传人]:cl****1
  • 文档编号:444375389
  • 上传时间:2023-02-05
  • 文档格式:DOC
  • 文档大小:58KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • 简单画图程序【实验目的】本实验目的是通过构建基于MFC的windows画图程序,使学生:(1) 理解MFC应用程序的运行机制(2) 掌握使用MFC构建Windows应用程序的根本构造及编程的根本方法(3) 理解和掌握MFC应用程序消息处理机制及应用(4) 掌握类向导〔ClassWizard〕的使用【实验要求】(1) 必须做好实验原理的预习2) 需要对提供的程序代码进展分析,并明确实验时还应在何处添加哪些语句实验环境】 Microsoft Windows *P Microsoft Visual C++ 6.01 根本功能描述1) 在单文档菜单中,在菜单行中可插入一个菜单项,命名为绘图,在下拉菜单中可分别设置绘制的图形形状,如直线、矩形及椭圆,线宽选项,有1-5可供选择,还可以设置线色以及填充色,通过弹出的颜色对话框选择需要的颜色,如果不选择线宽、线色以及填充色,则按默认的画笔,画刷来绘制选择的图形 2) 选择好图形后,通过鼠标可以绘制出相应的直线,矩形或椭圆,鼠标的按下确定图形的起点,鼠标的拖动则确定了图形的终点,即通过鼠标的拖动来决定图形的大小,当鼠标弹起,此图形则绘制完毕3) 增添工具栏,设置绘制的图形形状,线色以及填充色,可更方便地选择相应的功能。

      2设计思路 1) 对需要用到的变量进展初始化2) 选择相应的图形之后就响应相应的消息处理函数,给shape赋对应的值选择不同的线宽,线色与填充色,即可改变画笔或画刷的属性3) 鼠标的按下响应函数OnLButtonDown(),捕捉鼠标当前位置得到起点的坐标,鼠标的拖动响函数OnMouseMove()改变终点的坐标,鼠标的弹起响应OnLButtonUp(),确定终点坐标,刷新,得到绘制图形4) 选择图形或其它属性,可进展下一次绘制开场定义并初始化变shape 线色m_ncolor 填充色 m_fcolor 画笔pen画刷brush绘图起点opoint绘图终点cpoint选择线宽默认值〔w=1〕改变画笔属性选择线色默认值〔黑色〕改变画笔属性选择填充色默认值〔黑色〕改变画刷属性椭圆矩形直线响应函数OnEllipse()shape=3响应函数OnLine()shape=1响应函数OnRect()shape=2鼠标左键按下 响应函数OnLButtonDown()opoint=point鼠标移动 响应函数OnMouseMove()epoint=point响应OnPaint(),绘制图形鼠标左键弹起响应函数OnLButtonUp()刷新,得到图形完毕图1 程序流程图3软件设计3.1 设计步骤1〕创立单文档创立一个MFC AppWizard[e*e]工程,命名为"yinshuyan〞,如图2所示,并创立单文档,如图3所示。

      创立成功后,系统自动生成相应的类,如图4所示图2 创立工程图3 创立单文档图4 生成类2) 编辑菜单添加需要的菜单项,如图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〔通过菜单View->ClassWizard,或者快捷键Ctrl+w翻开〕中,对各菜单项添加对应的MAND消息处理函数,局部菜单项还添加对应的UPDATE_MAND_UI消息函数,如图7所示图7 建立类向导【注意:此图有误,Class name的下拉框中,应选择"CyinshuyanView〞而非此图显示的"CMainFrame〞】上述操作完成后,可以发现在Class CMainFrame中自动增加了类似OnLine()之类的许多函数,并且在源文件MainFrm.cpp中,自动添加了相应的消息映射。

      BEGIN_MESSAGE_MAP(CMainFrame, CFrameWnd) //{{AF*_MSG_MAP(CMainFrame) ON_WM_CREATE() ON_MAND(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所示 表2 界面控件表控件名称控件类型属性相关变量绘图下拉式菜单 无 无 直线菜单项工具栏按钮ID_LINEint shape矩形菜单项工具栏按钮ID_RECTint shape椭圆菜单项 工具栏按钮ID_ELLIPSEint shape线宽弹出式菜单 无int w颜色(线色)菜单项工具栏按钮ID_COLORCOLORREF m_nColor填充色菜单项工具栏按钮ID_FILLCOLORCOLORREFm_fColor3.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;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; //令线宽为1}void CYinshuyanView::OnW2() { w=2; //令线宽为2}void CYinshuyan::OnW3() { w=3; //令线宽为3}void CYinshuyanView::OnW4() { w=4; //令线宽为4}void CYinshuyanView::OnW5() { w=5; //令线宽为5}void CYinshuyanView::OnUpdateW1(CCmdUI* pCmdUI) { pCmdUI->SetRadio(w==1); //当线宽为1时,此选项前标有圆点}void CYinshuyanView::OnUpdateW2(CCmdUI* pCmdUI) { pCmdUI->SetRadio(w==2); //当线宽为2时,此选项前标有圆点}void CYinshuyanView::OnUpdateW3(CCmdUI* pCmdUI) { pCmdUI->SetRadio(w==3); //当线宽为3时,此选项前标有圆点}void CYinshuyanView::OnUpdateW4(CCmdUI* pCmdUI) { pCmdUI->SetRadio(w==4); }void CYinshuyanView::OnUpdateW5(CCmdUI* pCmdUI) { pCmdUI->SetRadio(w==5);}void CYinshuyanView::OnLine() { shape=1; //选择直线,则令shape为1}void CYinshuyanView::OnRect() { shape=2; //选择矩形,则令shape为2}void CYinshuyanView::OnEllipse() { shape=3; //选择椭圆,则令shape为3}void CYinshuyanView::OnUpdateLine(CCmdUI* pCmdUI) { pCmdUI->SetCheck(shape==1); //shape为1时,直线选项前打上勾}void CYinshuyanView::OnUpdateRect(CCmdUI* pCmdUI) { pCmdUI->SetCheck(shape==2); //shape为2时,矩形选项前打上勾}void CYinshuyanView::OnUpdateEllipse(CCmdUI* pCmdUI) { pCmdUI->SetCheck(shape==3); //shape为3时,椭圆选项前打上勾}void CYinshuyanView::OnColor() { CColorDialog Color; // 创立颜色对话框 if(Color.DoModal() == IDOK) // 如果用户点击OK按钮 m_nColor=Color.GetColor(); // 更改颜色,把颜色赋到m_nColor}void CYinshuyanView::OnFillColor() { CColorDialog FillColor; // 创立。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.