《中国石油大学(华东)VC++实验八23550.pdf》由会员分享,可在线阅读,更多相关《中国石油大学(华东)VC++实验八23550.pdf(8页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、word 专业资料-可复制编辑-欢迎下载 实验八 MFC 菜单编程实验 一、实验目的(1)熟悉 Visual Studio 开发环境;(2)掌握 MFC 程序中菜单资源的设计方法;(3)进一步熟悉 MFC 的消息映射机制;(4)进一步熟悉 MFC 环境中 GDI 编程技术。二、实验内容 如上图所示,创建一个单文档应用程序,实现鼠标的绘图功能。要求:(1)创建菜单和工具栏,实现线段、矩形、椭圆三个菜单项和工具栏按钮;(2)绘图前,选择菜单项或工具栏按钮,确定图形的形状。按下鼠标左键,拖 动鼠标开始绘图,结合鼠标的光标坐标值,来确定图形的形状和大小,并随着鼠标 的移动在屏幕上实时绘制图形,放开鼠标
2、左键,确定最后的图形,绘制在屏幕上。三、实验报告(1)列表实现绘图功能的代码清单;#include stdafx.h/SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的/ATL 项目中进行定义,并允许与该项目共享文档代码。#ifndef SHARED_HANDLERS#include Demo.h#endif#include DemoDoc.h#include DemoView.h word 专业资料-可复制编辑-欢迎下载#ifdef _DEBUG#define new DEBUG_NEW#endif /CDemoView IMPLEMENT_DYNCREATE(CDem
3、oView,CView)BEGIN_MESSAGE_MAP(CDemoView,CView)/标准打印命令 ON_COMMAND(ID_FILE_PRINT,&CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT,&CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW,&CView:OnFilePrintPreview)ON_COMMAND(ID_DRAW_ELLIPSE,&CDemoView:OnDrawEllipse)ON_COMMAND(ID_DRAW_LINE,&CDemoView:OnDra
4、wLine)ON_COMMAND(ID_DRAW_RECT,&CDemoView:OnDrawRect)ON_UPDATE_COMMAND_UI(ID_DRAW_ELLIPSE,&CDemoView:OnUpdateDrawEllipse)ON_UPDATE_COMMAND_UI(ID_DRAW_LINE,&CDemoView:OnUpdateDrawLine)ON_UPDATE_COMMAND_UI(ID_DRAW_RECT,&CDemoView:OnUpdateDrawRect)ON_WM_LBUTTONDOWN()ON_WM_MOUSEMOVE()ON_WM_LBUTTONUP()END
5、_MESSAGE_MAP()/CDemoView 构造/析构 CDemoView:CDemoView()/TODO:在此处添加构造代码 m_nDrawType=0;CDemoView:CDemoView()BOOL CDemoView:PreCreateWindow(CREATESTRUCT&cs)/TODO:在此处通过修改 /CREATESTRUCT cs 来修改窗口类或样式 return CView:PreCreateWindow(cs);word 专业资料-可复制编辑-欢迎下载/CDemoView 绘制 void CDemoView:OnDraw(CDC*pDC)CDemoDoc*pDo
6、c=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;/TODO:在此处为本机数据添加绘制代码 for(int i=0;i m_nPicNum;i+)switch(pDoc-m_Pici.m_nDrawType)case 0:pDC-MoveTo(pDoc-m_Pici.m_nX0,pDoc-m_Pici.m_nY0);pDC-LineTo(pDoc-m_Pici.m_nX1,pDoc-m_Pici.m_nY1);break;case 1:pDC-Rectangle(pDoc-m_Pici.m_nX0,pDoc-m_Pici.m_nY0,pDoc
7、-m_Pici.m_nX1,pDoc-m_Pici.m_nY1);break;case 2:pDC-Ellipse(pDoc-m_Pici.m_nX0,pDoc-m_Pici.m_nY0,pDoc-m_Pici.m_nX1,pDoc-m_Pici.m_nY1);break;/CDemoView 打印 BOOL CDemoView:OnPreparePrinting(CPrintInfo*pInfo)/默认准备 return DoPreparePrinting(pInfo);void CDemoView:OnBeginPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo
8、*/)/TODO:添加额外的打印前进行的初始化过程 void CDemoView:OnEndPrinting(CDC*/*pDC*/,CPrintInfo*/*pInfo*/)word 专业资料-可复制编辑-欢迎下载 /TODO:添加打印后进行的清理过程 /CDemoView 诊断#ifdef _DEBUG void CDemoView:AssertValid()const CView:AssertValid();void CDemoView:Dump(CDumpContext&dc)const CView:Dump(dc);CDemoDoc*CDemoView:GetDocument()co
9、nst/非调试版本是内联的 ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CDemoDoc);return(CDemoDoc*)m_pDocument;#endif/_DEBUG /CDemoView 消息处理程序 void CDemoView:OnDrawEllipse()/TODO:在此添加命令处理程序代码 m_nDrawType=2;void CDemoView:OnDrawLine()/TODO:在此添加命令处理程序代码 m_nDrawType=0;void CDemoView:OnDrawRect()word 专业资料-可复制编辑-欢迎下载 /T
10、ODO:在此添加命令处理程序代码 m_nDrawType=1;void CDemoView:OnUpdateDrawLine(CCmdUI*pCmdUI)/TODO:在此添加命令更新用户界面处理程序代码 if(m_nDrawType=0)pCmdUI-SetRadio(TRUE);else pCmdUI-SetRadio(FALSE);void CDemoView:OnUpdateDrawRect(CCmdUI*pCmdUI)/TODO:在此添加命令更新用户界面处理程序代码 if(m_nDrawType=1)pCmdUI-SetRadio(TRUE);else pCmdUI-SetRadio(
11、FALSE);void CDemoView:OnUpdateDrawEllipse(CCmdUI*pCmdUI)/TODO:在此添加命令更新用户界面处理程序代码 if(m_nDrawType=2)pCmdUI-SetRadio(TRUE);else pCmdUI-SetRadio(FALSE);word 专业资料-可复制编辑-欢迎下载 void CDemoView:OnLButtonDown(UINT nFlags,CPoint point)/TODO:在此添加消息处理程序代码和/或调用默认值 CDemoDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(
12、!pDoc)return;pDoc-m_nX0=point.x;pDoc-m_nY0=point.y;CView:OnLButtonDown(nFlags,point);void CDemoView:OnMouseMove(UINT nFlags,CPoint point)/TODO:在此添加消息处理程序代码和/或调用默认值 CClientDC dc(this);CDemoDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;/1 dc.SelectStockObject(WHITE_PEN);if(nFlags&MK_LBUTTO
13、N)switch(m_nDrawType)case 0:dc.MoveTo(pDoc-m_nX0,pDoc-m_nY0);dc.LineTo(pDoc-m_nX1,pDoc-m_nY1);break;case 1:dc.Rectangle(pDoc-m_nX0,pDoc-m_nY0,pDoc-m_nX1,pDoc-m_nY1);break;case 2:dc.Ellipse(pDoc-m_nX0,pDoc-m_nY0,pDoc-m_nX1,pDoc-m_nY1);break;word 专业资料-可复制编辑-欢迎下载 /2 pDoc-m_nX1=point.x;pDoc-m_nY1=point.
14、y;dc.SelectStockObject(BLACK_PEN);if(nFlags&MK_LBUTTON)switch(m_nDrawType)case 0:dc.MoveTo(pDoc-m_nX0,pDoc-m_nY0);dc.LineTo(pDoc-m_nX1,pDoc-m_nY1);break;case 1:dc.Rectangle(pDoc-m_nX0,pDoc-m_nY0,pDoc-m_nX1,pDoc-m_nY1);break;case 2:dc.Ellipse(pDoc-m_nX0,pDoc-m_nY0,pDoc-m_nX1,pDoc-m_nY1);break;CView:O
15、nMouseMove(nFlags,point);void CDemoView:OnLButtonUp(UINT nFlags,CPoint point)/TODO:在此添加消息处理程序代码和/或调用默认值 CDemoDoc*pDoc=GetDocument();ASSERT_VALID(pDoc);if(!pDoc)return;pDoc-m_PicpDoc-m_nPicNum.m_nDrawType=m_nDrawType;pDoc-m_PicpDoc-m_nPicNum.m_nX0=pDoc-m_nX0;pDoc-m_PicpDoc-m_nPicNum.m_nY0=pDoc-m_nY0;pDoc-m_PicpDoc-m_nPicNum.m_nX1=pDoc-m_nX1;pDoc-m_PicpDoc-m_nPicNum.m_nY1=pDoc-m_nY1;pDoc-m_nPicNum+;word 专业资料-可复制编辑-欢迎下载 CView:OnLButtonUp(nFlags,point);(2)总结实验的心得体会,实验中遇到的困难以及解决的方法等。这次实验主要练习了 MFC 菜单编程。通过这次实验掌握了 MFC 程序菜单资源的设计方法,进一步熟悉掌握了 MFC 的消息映射机制,进一步熟悉了 MFC 环境中的 GDI 编程技术。