




已阅读5页,还剩32页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
武汉理工大学面向对象程序设计课程设计说明书简单画图程序1.基本功能描述本次课程设计的任务是利用计算机和VC开发环境编写一个简单画图程序,该程序的设计指标(即主要功能)有:用鼠标拖动绘制圆、椭圆、矩形,线等基本图形;能控制画笔的线宽和颜色;能对图形进行颜色填充;在鼠标移动的过程中能实时显示当前绘制的图形。除了以上几点功能,我有另外添加了工具栏、铅笔、橡皮等功能来使程序更方便地让用户使用,简化了人机交互的过程。2.设计思路首先是界面的问题,既然课设的题目是简单画图,那在建立工程的时候就要选择文档结构而不是以前做的基于对话框。可选择单文档结构或多文档结构,但想到画图界面一般只有一个,从简洁的角度考虑,选择单文档结构。而且用户界面在设计的时候要尽可能简单美观,一目了然,对相应功能有图标提示,使用户方便使用。然后便是画图功能的具体实现。分析课设要求,可以发现功能一要求的的椭圆、矩形、直线可以分别通过Ellipse();、Rectangle();、MoveTo();、LineTo();这四个函数来实现。功能二控制画笔线宽和颜色可以给二者分别关联参数,通过改变线宽参数值来控制线宽,通过调用通用对话框改变颜色参数值来控制颜色。功能三对图形进行颜色填充虽以前未接触过,但查阅资料后发现可以调用ExtFloodFill();并合理设定参数值来实现。功能四的实时显示功能可以通过调用MouseMove();函数来实现。这些功能需要建立菜单资源来表示各个功能选项,并建立相应的消息响应函数来进行实现。另外,画图程序主要是通过鼠标来进行操作,所以要对鼠标消息的响应及处理函数多下功夫来思考和编写。至于额外添加的功能,工具栏通过添加工具栏资源和关联相应菜单中画图功能ID实现;铅笔、橡皮的功能则是利用MouseMove();函数,在其中做了一些改动来实现。2开始2.1.程序流程图: 变量初始化(m_nDrawType,m_clr等)响应函数m_Pen(m_Eraser)=TRUE并将其他橡皮(铅笔)、填充等所关联变量置为FALSE.响应函数创建相应对话框线宽线型设置点 直线矩形填充铅笔橡皮 更改变量m_clr (m_nLineWidth,m_nLineStyle)参数值图1 程序流程图MouseMove函数画直线进行填充鼠标左键弹起响应函数m_ptOldOrigin=point;m_LButtonDown=TRUE;画点结束画椭圆画矩形鼠标左键按下响应函数m_ptNewOrigin=point;m_ptOldOrigin=point;m_LButtonDown=TRUE;判断各参数值以确定功能铅笔功能橡皮功能IDOK=1?颜色选择椭圆响应函数m_nDrawType =1/2/3/4;对应点、直线、矩形、椭圆响应函数m_Fill=TRUE并将其他橡皮、铅笔等所关联变量置为FALSE.武汉理工大学面向对象程序设计课程设计说明书3.软件设计3.1.设计步骤1) 打开VS2010,选择新建项目,选中MFC应用程序,标题为CWN_Graphic;2) 选择单文档结构,其他为默认值,点击完成。3.2 .界面设计3.2.1.添加菜单1) 选择资源视图,鼠标右键,添加,资源;2)在资源视图中打开添加的菜单资源,将各个功能的名称添加进去并合理安排,并设置好相应的ID,如图2:图2 编辑菜单及相应ID3.2.2 .添加工具栏1) 在资源视图下右键选择添加资源,ToolBar;2) 打开新建的工具栏,在上面添加各个小按钮,按钮图像自行画出;3) 将每个按钮的ID与菜单项一一对应起来,如图3:图3 工具栏样式及ID3.3.关键功能实现1) 打开类向导;2) 为各个菜单项添加消息函数,如图4:图4 添加消息函数相关ID、关联变量及响应函数如表1:表1 相关功能ID 及所关联变量名称ID关联变量响应函数点IDM_DOTm_nDrawType = 1OnDot()直线IDM_LINEm_nDrawType = 2OnLine()矩形IDM_RECTANGLEm_nDrawType = 3OnRectangle()椭圆IDM_ELLIPSEm_nDrawType = 4OnEllipse()画笔IDM_PENm_Pen = TRUEOnPen()填充IDM_FILLm_Fill = TRUEOnFill()橡皮(小)IDM_ERASER1-OnEraser1()橡皮(中)IDM_ERASER2-OnEraser2()橡皮(大)IDM_ERASER3-OnEraser3()线宽+线型IDM_LINE_WIDTH-OnLineWidth()颜色IDM_Color-OnColor()3) 按照所需在CWN_GraphicView.h中添加变量并在CWN_GraphicView.cpp中对变量初始化:UINT m_nDrawType = 0; /绘画类型初始为0CPoint m_ptOldOrigin = 0;/坐标点初始为(0,0)CPoint m_ptNewOrigin = 0;UINT m_nLineWidth = 0;/线宽初始为0UINT m_EraserWidth = 1;/橡皮初始大小为1INT m_nLineStyle = 0;/线宽初始为0BOOL m_Pen = FALSE;/画笔功能未被选中BOOL m_Eraser = FALSE;/橡皮功能未被选中BOOL m_LButtonDown = FALSE;/鼠标左键未按下BOOL m_Fill = FALSE;/填充功能未被选中COLORREF m_clr = RGB(0,0,0);/颜色初始值为黑色4) 在各响应函数中添加相应代码,例如:/*左键按下*/*该函数实现了再鼠标左键按下时确定按下点的坐标、将左键被按下置为1和判断是否填充选项被选中,若选中则进行填充,未选中则无操作*/void CCWN_GraphicView:OnLButtonDown(UINT nFlags , CPoint point) m_ptNewOrigin=point;/将当前点坐标传给变量m_ptOldOrigin=point;m_LButtonDown=TRUE;/左键按下赋值1if(m_Fill=TRUE)/填充功能CClientDC dc(this);HBRUSH hBrush=CreateSolidBrush(m_clr);/选择画刷dc.SelectObject(hBrush);dc.ExtFloodFill (m_ptNewOrigin.x,m_ptNewOrigin.y,RGB(0,0,0),0);/该函数将使用当前刷子填充显示表面区域CView:OnLButtonDown(nFlags,point);/*左键松开*/*该函数通过在鼠标左键松开时,将松开点坐标传给PC,并由之前选择的绘画类型来判断要进行的绘画操作*/void CCWN_GraphicView:OnLButtonUp(UINT nFlags , CPoint point)m_LButtonDown=FALSE; /左键松开赋值0CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr); /创建画笔画刷dc.SelectObject (&pen);/选择画笔CBrush*pBrush=CBrush:FromHandle (HBRUSH)GetStockObject(NULL_BRUSH);dc.SelectObject (pBrush);/选择画刷m_ptNewOrigin=point; /左键松开的坐标点送给m_ptNewOriginswitch(m_nDrawType)case 1:/*画点*/dc.SetPixel(point,m_clr);break;case 2:/*画线*/dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);break;case 3:/*画矩形*/dc.Rectangle (CRect(m_ptOldOrigin,m_ptNewOrigin);break;case 4:/*画椭圆*/dc.Ellipse (CRect(m_ptOldOrigin,m_ptNewOrigin);break;CView:OnLButtonUp (nFlags,point);/*线型+线宽设置*/*该函数在线型线宽功能被选择时,会生成一个线型线宽设置对话框(之前在资源中添加和编辑的对话框资源),并将用户操作后的线型线宽值传给PC*/void CCWN_GraphicView:OnLineWidth()/ TODO: 在此添加命令处理程序代码CSettingDlg line_dlg;line_dlg.m_nLineWidth = m_nLineWidth ; /将先前设置的线宽回传给对话框line_dlg.m_nLineStyle = m_nLineStyle; /将先前设置的线型回传给对话框if(IDOK=line_dlg.DoModal ()m_nLineWidth=line_dlg.m_nLineWidth ;m_nLineStyle = line_dlg.m_nLineStyle ;/*动态显示函数*/*该函数单独写出,配合OnMouseMove();函数可实现动态显示的功能*/void CCWN_GraphicView:Draw()CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);CPen *oldPen=dc.SelectObject(&pen);dc.SelectStockObject(NULL_BRUSH);int drawmode=dc.SetROP2(R2_NOTXORPEN); /*R2_NOTXORPEN模式的作用是:先把画笔的颜色取反,再与屏幕颜色进行“或”操作,从而得到像素最终显示的颜色。*/switch(m_nDrawType)case 2:dc.MoveTo(m_ptOldOrigin);dc.LineTo(m_ptNewOrigin);break;case 3:dc.Rectangle(CRect(m_ptOldOrigin,m_ptNewOrigin);break;case 4:dc.Ellipse(CRect(m_ptOldOrigin,m_ptNewOrigin);break;dc.SetROP2(drawmode);dc.SelectObject(oldPen);/*MOUSE MOVE*/*此函数与前面的动态显示函数(Draw();)进行配合便可实现在鼠标移动时的实时显示功能,思路是在绘图时,先用屏幕背景色覆盖掉鼠标移动前的画面,然后用选定的画笔颜色重新绘制下一次鼠标移动的画面*/void CCWN_GraphicView:OnMouseMove(UINT nFlags, CPoint point)/ TODO: 在此添加消息处理程序代码和/或调用默认值CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);CPen *oldPen=dc.SelectObject(&pen);if(m_LButtonDown!=FALSE)Draw();m_ptNewOrigin=point;Draw();if(m_Pen=TRUE) /铅笔功能m_nDrawType=0; /画图类型改为初始值,以免多重画图dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);/修改线段起点m_ptOldOrigin=m_ptNewOrigin;m_ptNewOrigin=point;if(m_Eraser=TRUE) /橡皮功能m_nDrawType=0; CPen pen(m_nLineStyle,m_EraserWidth,RGB(255,255,255);dc.SelectObject(&pen);dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);/修改线段起点m_ptOldOrigin=m_ptNewOrigin;m_ptNewOrigin=point;dc.SelectObject(oldPen);CView:OnMouseMove(nFlags, point);/*选择 铅笔*/*该函数在选择铅笔功能后,将铅笔功能置为真,其他有干扰的功能置为假*/void CCWN_GraphicView:OnPen()/ TODO: 在此添加命令处理程序代码m_Pen = TRUE;/画笔被选中m_Fill = FALSE;/取消填充功能m_Eraser = FALSE;/取消橡皮功能4.结论与心得体会本次课程设计虽说是“简单”画图程序的设计,但真要是自己做起来,感觉一点也不简单。以前做的课程实验及课后习题等,几乎都是在老师讲解过相关课本知识和示范操作后稍作一定的功能修改,但因为毕竟是学过了,也看过老师的演示,所以就算有不会的地方也能在观看教学PPT或课堂笔记及查看教材资料后自行解决。但这次的简单画图程序的设计,不仅综合了以前对MFC编程的全部所学知识,而且还有未学过的几个函数的详细应用,这就需要在仔细查阅相关书籍、网络资料等来对这几个函数的用法进行了解。虽说起来简单,但实际操作中却漏洞百出,代码设计一改再改才最后实现了预定功能。另外,在这次的课程设计程序编写过程中,我对MFC编程的过程流程在脑中也愈发清晰,对每个函数应如何声明,实现,使用的过程愈发明了。过程一波三折,有语法问题,函数使用的问题,兼容性问题,头文件或变量无法识别,逻辑错误等等,每一种错误都花费了许多精力去找寻问题所在。虽然辛苦,但觉得收获良多。在编写程序的过程中,首先是一头雾水,总是在出错,而自己有不明白为什么会出错;慢慢坚持编写和查资料等找错,就一点点好了起来,对整个流程需要做的事也越来越明白;等到后期,就基本不会再出什么错了,就只是对程序的优化处理。可能程序的编写就是这样,开头最难,等写下去,后面倒是只是代码的添加,却不怎么难了。所以,在编写程序之前,一定要自己把程序流程好好想一想,弄明白每个流程的关键所在,流程搞得越清楚,在后续编写的过程中遇到的错误就会越少,越顺利。除此之外,遇到搞不明白的问题的时候,要多和同学进行讨论。本次编写过程中,我就经常和选题相同的另一位同学进行相关的讨论,尤其是对MouseMove函数的使用以及填充功能的实现,我们进行了大量的讨论,在讨论后我们再进行实际验证,并不断修改代码,最终才使相关功能得以实现。5.思考题1) 说明直线、椭圆、矩形绘制使用的函数,及其参数含义?答:直线、椭圆及矩形的绘制是在CCWN_GraphicView:OnLButtonUp();函数中实现,此函数在左键弹起时,将松开点坐标传给PC,并由之前选择的绘画类型(m_nDrawType的值,为2则直线,3则是矩形,4则是椭圆)来判断要进行的绘画操作。若为直线,则调用dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);这两个函数,前者将窗口坐标移到指定位置,后者执行连线操作;若为矩形,则调用dc.Rectangle (CRect(m_ptOldOrigin,m_ptNewOrigin);函数,通过两点坐标画出矩形;若为椭圆,则调用dc.Ellipse (CRect(m_ptOldOrigin,m_ptNewOrigin);函数,由两点坐标确定一个矩形,再由矩形来内接画出一个椭圆。2)如何控制菜单项的状态,使用的消息类型?答:菜单项的状态是通过各个消息响应函数来确定的,我规定了几个变量m_Pen,m_Eraser等,在选中其中一种功能后,在相应函数将其值置为TRUE,其他值置为FALSE以免产生干扰。而其他的如线型线宽因顾不干扰则只是设置了代表各自实际值的变量而未设置是否被选中的变量。3)如何设置菜单和工具栏按钮的快捷键操作?答:快捷键的功能通过在资源视图下设置加速键来实现。在资源视图下打开加速键列表,在列表末尾空白处点击出现一个新的加速键选项,选择需要设置加速键的菜单ID值,如IDM_LINE,在修饰符下拉菜单中选择想要进行的快捷操作如Ctrl,在Key下输入想要组合的键值如L,类型选择VIRTKEY后便可完成快捷键的设置。6.附录6.1.调试报告本次课设程序编写及调试过程中,遇到的问题主要由以下几种:1) 语法错误:例如在写“;”时的中英文格式不对、少写了“”等导致的语法错误,修改方法即为将错误的语法改为正确的。2) 无法识别预编译头文件:遇到这样的问题后,在项目中打开属性,C/C+,预编译头,选择不使用预编译头文件即可。3) 无法识别*字符:这类问题的解决方法是:在项目中打开属性,配置属性,常规,字符集,选择使用多字节字符集即可解决。4) 函数使用方式有错误:出现这一类错误主要是对函数的使用不熟悉,对其中参数的作用不了解所致;解决方法只能是去多方查阅资料,深入了解其使用方法及参数含义,并在可能的情况下去找一些范例来进行对比,从而掌握其正确使用方法。5) 其他:本次编写过程中还出现过编译链接都能过去,但运行时却会出现一个对话框的warning然后程序不能运行的错误。有过两次,第一次未搞明白其具体含义,在上网查询解决方法后,通过项目属性,代码生成,运行库下选择多线程DLL(/MD)后解决;第二次在多方查找资料后明白了是因为在添加工具栏按钮时,按钮位图大小不一(有两种,一种大小17*17,另一种大小15*16)所致,将按钮位图大小改为相同的后,报错消失。6.2.测试结果初始界面,图5:图5 程序运行初始界面线型线宽设置对话框,图6:图6 线型线宽设置对话框操作示例,图7:图7 操作示例6.3.关键源代码/ GraphicView.cpp : CGraphicView 类的实现/#include stdafx.h/ SHARED_HANDLERS 可以在实现预览、缩略图和搜索筛选器句柄的/ ATL 项目中进行定义,并允许与该项目共享文档代码。#ifndef SHARED_HANDLERS#include Graphic.h#endif#include GraphicDoc.h#include GraphicView.h#include SettingDlg.h#ifdef _DEBUG#define new DEBUG_NEW#endif/ CGraphicViewIMPLEMENT_DYNCREATE(CGraphicView, CView)BEGIN_MESSAGE_MAP(CGraphicView, CView)/ 标准打印命令ON_COMMAND(ID_FILE_PRINT, &CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, &CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, &CGraphicView:OnFilePrintPreview)ON_WM_CONTEXTMENU()ON_WM_RBUTTONUP()ON_WM_LBUTTONUP()ON_WM_LBUTTONDOWN()ON_COMMAND(IDM_DOT, &CGraphicView:OnDot)ON_COMMAND(IDM_LINE, &CGraphicView:OnLine)ON_COMMAND(IDM_RECTANGLE, &CGraphicView:OnRectangle)ON_COMMAND(IDM_ELLIPSE, &CGraphicView:OnEllipse)ON_COMMAND(IDM_LINE_WIDTH, &CGraphicView:OnLineWidth)ON_COMMAND(IDM_PEN, &CGraphicView:OnPen)ON_WM_MOUSEMOVE()ON_COMMAND(IDM_Color, &CGraphicView:OnColor)ON_COMMAND(IDM_FILL, &CGraphicView:OnFill)ON_COMMAND(IDM_ERASER1, &CGraphicView:OnEraser1)ON_COMMAND(IDM_ERASER2, &CGraphicView:OnEraser2)20ON_COMMAND(IDM_ERASER3, &CGraphicView:OnEraser3)END_MESSAGE_MAP()/ CGraphicView 构造/析构CGraphicView:CGraphicView()/ TODO: 在此处添加构造代码/*变量初始化*/m_nDrawType = 0;/绘画类型初始为0m_ptOldOrigin = 0;/坐标点初始值为0m_ptNewOrigin = 0;m_EraserWidth = 1;/橡皮初始大小为1m_nLineWidth = 0;/线宽初始值0m_nLineStyle = 0;/线型初始为0m_clr = RGB(0,0,0);/颜色初始值为黑m_Pen = FALSE;/画笔初始未选中m_Eraser = FALSE; /橡皮初始未选中m_LButtonDown = FALSE; /鼠标左键初始值为0m_Fill = FALSE;/填充按钮初始未选中CGraphicView:CGraphicView()BOOL CGraphicView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: 在此处通过修改/ CREATESTRUCT cs 来修改窗口类或样式return CView:PreCreateWindow(cs);/ CGraphicView 绘制void CGraphicView:OnDraw(CDC* pDC)CGraphicDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);if (!pDoc)return;/ TODO: 在此处为本机数据添加绘制代码/ CGraphicView 打印void CGraphicView:OnFilePrintPreview()#ifndef SHARED_HANDLERSAFXPrintPreview(this);#endifBOOL CGraphicView:OnPreparePrinting(CPrintInfo* pInfo)/ 默认准备return DoPreparePrinting(pInfo);void CGraphicView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加额外的打印前进行的初始化过程void CGraphicView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: 添加打印后进行的清理过程void CGraphicView:OnRButtonUp(UINT /* nFlags */, CPoint point)ClientToScreen(&point);OnContextMenu(this, point);/*左键按下*/void CGraphicView:OnLButtonDown(UINT nFlags , CPoint point) m_ptNewOrigin=point;/将当前点坐标传给变量m_ptOldOrigin=point;m_LButtonDown=TRUE;/左键按下赋值1if(m_Fill=TRUE)/填充功能CClientDC dc(this);HBRUSH hBrush=CreateSolidBrush(m_clr);dc.SelectObject(hBrush);dc.ExtFloodFill (m_ptNewOrigin.x,m_ptNewOrigin.y,RGB(0,0,0),0);CView:OnLButtonDown(nFlags,point);/*左键松开*/void CGraphicView:OnLButtonUp(UINT nFlags , CPoint point)m_LButtonDown=FALSE; /左键松开赋值0CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr); /创建画笔画刷dc.SelectObject (&pen);CBrush*pBrush=CBrush:FromHandle(HBRUSH)GetStockObject(NULL_BRUSH);dc.SelectObject (pBrush);m_ptNewOrigin=point; /左键松开的坐标点送给m_ptNewOriginswitch(m_nDrawType)case 1:/*点*/dc.SetPixel(point,m_clr);break;case 2:/*线*/dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);break;case 3:/*矩形*/dc.Rectangle (CRect(m_ptOldOrigin,m_ptNewOrigin);break;case 4:/*椭圆*/dc.Ellipse (CRect(m_ptOldOrigin,m_ptNewOrigin);break;CView:OnLButtonUp (nFlags,point);/*动态显示*/void CGraphicView:Draw()CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);CPen *oldPen=dc.SelectObject(&pen);dc.SelectStockObject(NULL_BRUSH);int drawmode=dc.SetROP2(R2_NOTXORPEN);/*R2_MERGENOTPEN模式的作用是:先把画笔的颜色取反,再与屏幕颜色进行“或”操作,从而得到像素最终显示的颜色。*/switch(m_nDrawType)case 2:dc.MoveTo(m_ptOldOrigin);dc.LineTo(m_ptNewOrigin);break;case 3:dc.Rectangle(CRect(m_ptOldOrigin,m_ptNewOrigin);break;case 4:dc.Ellipse(CRect(m_ptOldOrigin,m_ptNewOrigin);break;dc.SetROP2(drawmode);dc.SelectObject(oldPen);/*MOUSE MOVE*/void CGraphicView:OnMouseMove(UINT nFlags, CPoint point)/ TODO: 在此添加消息处理程序代码和/或调用默认值CClientDC dc(this);CPen pen(m_nLineStyle,m_nLineWidth,m_clr);CPen *oldPen=dc.SelectObject(&pen);if(m_LButtonDown!=FALSE)Draw();/覆盖鼠标移动前的图像m_ptNewOrigin=point;Draw();/绘制鼠标移动后的图像if(m_Pen=TRUE) /铅笔功能m_nDrawType=0; /画图类型改为初始值,以免多重画图dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);/修改线段起点m_ptOldOrigin=m_ptNewOrigin;m_ptNewOrigin=point;if(m_Eraser=TRUE) /橡皮功能m_nDrawType=0; CPen pen(m_nLineStyle,m_EraserWidth,RGB(255,255,255);dc.SelectObject(&pen);dc.MoveTo (m_ptOldOrigin);dc.LineTo (m_ptNewOrigin);/修改线段起点m_ptOldOrigin=m_ptNewOrigin;m_ptNewOrigin=point;dc.SelectObject(oldPen);CView:OnMouseMove(nFlags, point);void CGraphicView:OnContextMenu(CWnd* /* pWnd */, CPoint point)#ifndef SHARED_HANDLERStheApp.GetContextMenuManager()-ShowPopupMenu(IDR_POPUP_EDIT, point.x, point.y, this, TRUE);#endif/ CGraphicView 诊断#ifdef _DEBUGvoid CGraphicView:AssertValid() constCView:AssertValid();void CGraphicView:Dump(CDumpContext& dc) constCView:Dump(dc);CGraphicDoc* CGraphicView:GetDocument() const / 非调试版本是内联的ASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CGraphicDoc);return (CGraphicDoc*)m_pDocument;#endif /_DEBUG/ CGraphicView 消息处理程序/*选择 点*/void CGraphicView:OnDot()/ TODO: 在此添加命令处理程序代码m_nDrawType=1;/绘画类型为1m_Pen = FALSE;/未选中画笔m_Eraser = FALSE;/未选中橡皮m_Fill = FALSE;/未选中填充/*选择 线*/void CGraphicView:OnLine()/ TODO: 在此添加命令处理程序代码m_nDrawType=2;/绘画类型为2m_Pen = FALSE;/未选中画笔m_Eraser = FALSE;/未选中橡皮m_Fill = FALSE;
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 智能家居产品体验店设备维护保养合同
- 影视拍摄现场群众演员意外险及安全保障协议
- 电池制造企业安全生产责任与理赔补充协议
- 全新业态商业连锁品牌加盟合作协议
- 预应力混凝土桥梁工程施工安全防护及检测协议
- 上市公司股权转让款结算及合规审查协议
- 专业潜水旅游项目定制与设备租赁合同
- 模具验收与生产效率提升协议
- 婚前股权投资古董收藏品分割与权益分配协议
- DB42-T 2014-2023 导轨式胶轮系统交通工程技术规程
- 越出站界调车RAILWAY课件
- 河北武安招聘警务辅助人员笔试真题2024
- 2025年高级插花花艺师(三级)理论考试题(附答案)
- 脊柱损伤搬运操作
- 医院医用耗材培训
- 布鲁氏菌病培训课件
- 2025年古董拍卖收藏品买卖协议书
- 【托比网】2024中国工业品数字化发展报告
- 砌石截水墙施工方案
- 海岸工程学设计计算书
- 大学美育知到智慧树章节测试课后答案2024年秋长春工业大学
评论
0/150
提交评论