简单画图程序的设计.doc_第1页
简单画图程序的设计.doc_第2页
简单画图程序的设计.doc_第3页
简单画图程序的设计.doc_第4页
简单画图程序的设计.doc_第5页
已阅读5页,还剩25页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

面向对象程序设计课程设计报告设计题目: 简单画图程序的设计 学 院: 信息工程学院 专 业: 计算机科学与技术(交通) 学 号: 201224020326 姓 名: 房战锋 同组同学学号: 201224020325 指导教师: 张 少 博 2013 年 12 月 24 日 目录 第一章:设计目的及内容.2 1.1【设计目的】.2 1.2【设计内容】.2第二章:基本功能概述.3 2.1【工程的新建】.3 2.2【单文档简介】.4 2.3【添加消息响应函数】.5 2.4【资源】.5 2.5【设备环境】.6第三章:设计思路.6第四章:软件设计.7 4.1【设计步骤及关键代码】.7 4.1.1【点、直线、矩形、椭圆的绘制】.9 4.1.2【连续线及扇形的绘制】.11 4.1.3【画刷】.12 4.2【设置对话框】.14 4.3【颜色】.14 4.4【打开与保存】.15第五章:结论与心得体会.16 参考文献:.17附录:.18 【调试报告】.18 【测试结果】.18 【关键代码】.18第1章 :设计目的及内容1.1【设计目的】1 学习Visual C+的MFC开发程序的步骤。2 综合运用所学的类、继承和多态的知识。3 进一步掌握程序的调试方法。1.2【设计内容】 1 利用MFC的向导,创建基于单文档的应用程序; 2 编程实现,绘制线、圆、矩形的功能; 3 能够设定当前要画的图形样式(最少为以上3种)和图形颜色(最少能够设为以下4 种颜色:黑、红、绿、蓝)。 4 当窗口重绘后,还能保持原来的图形。 5 选做1:能够选中某些已绘制的图形,并删除之。 6 选做2:能够保存已绘制的图形,下次打开时恢复原状。 第2章 :基本功能概述2.1【工程的新建】打开Microsoft Visual C+ 6.0 点击File New 在Projects中选择 MFC AppWizard (exe) ; 在 Project name中输入工程的名字Graphic,在 Location中选择工程存放的路径。填完后点击OK按钮。(如图1)填完后点击OK按钮,弹出对话框(如图2)。在弹出来的对话框中我们可以选择生成三种不同类型的应用程序:单文档、多文档、对话框。 单文档程序如记事本,在一个应用程序中只能对一个文档进行操作,降低了编程的复杂度并减少了运行程序时所需的资源。对某些小型应用(比如文本编辑器或小型图像编辑器)可以采用这种类型的窗口应用程序。 在这个程序中,我们就需要单文档,选择完后点击Next,设置默认,最后点击Finish完成工程的创建。图1图22.2【单文档简介】生成单文档程序后,进行编译,在运行,我们可以看到以下的结果。如图3 图3在ClassView中,我们可以看到系统自动为我们生成了五个类:CApp , CDoc , CView , CAboutDlg , CMainFrame。 如图4图4CApp相当于C语言中的main()函数。是程序的起始。 CDoc是用于处理程序中文档的类。 CView主要是处理客户区的可视化的操作的类。 CAboutDlg是处理关于对话框的类。 CMainFrame是非客户区的一些资源的类。 我们主要是对CView 类进行操作。2.3【添加消息响应函数】 系统为我们生成了一个程序的框架,但是这个框架完成不了什么具体的功能。为了使程序程序完成我们想要做的事,我们要向这个框架中加入一些代码。 VC+程序的运行并不像C语言是按照顺序运行下来的。每当我们完成一个事件,系统就会发出特定的消息,程序就会跳到相应的消息响应函数中执行里面的代码。单击菜单中的View-Class Wizard(或按快捷键Ctrl+W),将会弹出MFC Class Wizard对话框。在Class Name中选择CView,在Messages中选择WM_LBUTTONDBLCLK,点击右边的Add Function按键。这样我们就为程序添加了鼠标左键双击的消息响应函数,函数名为OnLButtonDblClk(UINT nFlags, CPoint point)。我们点击Edit Code按键就可以进入消息响应函数中。 我们在消息响应函数中添加如下代码: AfxMessageBox(“Hello Word!”); 运行程序!当我们在客户区中双击鼠标左键时,我们可以看到效果(如图5)。 我们在完成双击鼠标左键这个事件后,Windows便会发出WM_LBUTTONDBLCLK这条消息。我们的程序收到这个消息后,就会跳转到鼠标左键双击的消息响应函数内,执行里面的代码。 同样的,我们可以添加其他的消息响应函数,如鼠标左键按下,抬起,鼠标移动等(WM_LBUTTONUP、WM_LBUTTONDOWN、WM_MOUSEMOVE等)。我们程序就是在这样的消息响应机制下运行的。 图52.4【资源】 在ResoureView 里,我们可以编辑对话框、菜单、工具条、快捷键等资源。 点开Menu,可以看到一个ID为IDR_MAINFRAME的菜单。ID是一个标识,实际上是一个无符号整型常量,每一个资源在程序中都有一个唯一的ID号。双击IDR_MAINFRAME,在右边的视图中双击帮助右边的虚线框,弹出菜单属性,在Caption中输入“画图”,并将其关闭。双击画图菜单下面出现虚线框,在caption中输入“画线”后将其关闭。双击画线,在弹出的菜单属性中ID栏的ID_MENUITEM32775改成ID_MENUITEM_LINE。同样方法在建一个“画圆”菜单项。注意:每个资源对应一个ID号,ID号的命名全部用大写字母,且要符合匈牙利命名法。我们为新的菜单项起名,如果我们选择了Pop-up,生成的菜单就还有下级子菜单;如果没有选择,菜单就没有下级菜单。我们同样可以在Class Wizard 中为我们生成的菜单添加响应。 在Class Wizard 中的Object IDs中选中菜单的ID号,Messages中选择COMMOND,然后点击Add Function。这样,我们就为新建的菜单添加了点击的响应,我们同样可以点击Edit Code 编辑消息响应函数。 2.5【设备环境】 CDC是设备环境类的基类直接由CObject派生。是GDI的关键元素,它代表了物理设备。每一个C+设备环境对象都有相对应Windows设备环境,并通过一个32位类型的HDC句柄来标识。CDC类的虚拟性使我们可以很容易的做到编写同时适用于多种设备的代码。使用CDC类可以使我们的作图不用关心设备的问题。 CClientDC和CWindowDC是显示设备环境类,都是由CDC派生而来,区别在于CClientDC是窗口的客户区不包括边框、标题栏和菜单栏,(0,0)指客户区域的左上角。CWindowDC的(0,0)指整个屏幕的左上角,这意味着我们可以在显示器的任意地方绘图,包括窗口边框、标题栏和菜单栏等等。CWindowDC一般应用在框架窗口,而不是视图窗口。 CDC对象被创建后一定要在合适的时候将它删除掉,如果忘记了删除设备环境对象则会造成内存丢失。在每次绘图前,我们要获取设备环境,我们可以使用CDC* GetDC ( ) 函数来获取设备环境。在绘图完成后,使用void ReleaseDC(CDC* pDC ) 函数释放设备环境。第3章 :设计思路我们的设计思路是编辑菜单项,下图是关于菜单的结构图,写出对应的菜单项相应函数,当在菜单选项中选择某项时,会执行相应的代码,再就是在视图类中添加消息,并添加消息响应函数,发出哪个消息时,会执行相应的消息响应函数,最终显示在屏幕上。简易画图板文件绘图笔刷打开保存点直线矩形椭圆扇形连续线设置颜色简单笔刷位图笔刷线宽线型第4章 :软件设计4.1【设计步骤及关键代码】首先,新建一个单文档类型的MFC AppWizard (exe)工程,工程取名为:Graphic。为此程序添加一个子菜单,菜单名称为“绘图”,并为其添加六个菜单项,分别用来控制不同图形的绘制。当用户选择其中的一个菜单项后,程序将按照当前的选择进行相应图形的绘制。添加的六个菜单项的ID及名称如表1所示。然后分别为这六个菜单项添加命令响应,本程序让视类(CGraphicView)对这些菜单命令进行响应,这六个响应函数的名称分别如表1所示。菜单项ID菜单项名称菜单项命令响应函数IDM_DOT点OnDotIDM_LINE直线OnLineIDM-RECTANGLE矩形OnRectangleIDM_ELLIPSE椭圆OnEllipseIDM_SHANXING扇形OnShanxingIDM_LIANXUXIAN连续线OnLianxuxian表1添加的菜单项在程序运行以后,当用户单击某个菜单项时,应该把用户的选择保存起来,以便随后的绘图操作使用。因此在CGraphicView类中添加一个私有变量m_nDrawType;用来保存用户的选择,该变量的定义如下所述:private: UINT m_nDrawType:接着,在视类的构造函数中将此变量初始化为0,表明用户还没选择选项,程序代码如下:CGraphicView:CGraphicView()/ TODO: add construction code here m_nDrawType=0;利用switch/case语句,来分别完成相应图形的绘制。当用户选择【绘图】菜单下的不同子菜单项时,将变量m_nDrawType设置为不同的值。程序代码如下:void CGraphicView:OnDot() / TODO: Add your command handler code herem_nDrawType=1;void CGraphicView:OnLine() / TODO: Add your command handler code herem_nDrawType=2;void CGraphicView:OnRectangle() / TODO: Add your command handler code herem_nDrawType=3;void CGraphicView:OnEllipse() / TODO: Add your command handler code herem_nDrawType=4;void CGraphicView:OnShanxing() / TODO: Add your command handler code herem_nDrawType=5;void CGraphicView:OnLianxuxian() / TODO: Add your command handler code herem_nDrawType=6;4.1.1点、直线、矩形、椭圆的绘制 对于直线、矩形和椭圆,在绘制时都可有两点来确定其图形。当鼠标左击时得到一个点,当鼠标左键松开时得到另外一个点。为视类CGraphicView分别记住鼠标左键按下和弹起这两个消息。另外当鼠标左键按下时,需要将鼠标当前按下点保存,因此我们为CGraphicView再增加一个CPoint类型的私有成员变量:m_ptOrigin,在视类的构造函数中将此变量初始化为0。在鼠标左键按下消息响应函数中,保存该点,代码如下:void CGraphicView:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultm_ptOrigin=point; /保存鼠标按下得到点CView:OnLButtonDown(nFlags, point);在鼠标左键弹起消息响应函数中实现绘图,代码如下:void CGraphicView:OnLButtonUp(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default /创建并获得设备描述CClientDC dc(this); switch (m_nDrawType)case 1:dc.SetPixel(point,RGB(255,0,0); /绘制一个红色的点break;case 2: /绘制直线dc.MoveTo(m_ptOrigin); /调用MoveTo函数移动到原点dc.LineTo(point); /调用LineTo函数绘制到终点break;case 3: /绘制矩形 dc.Rectangle(CRect(m_ptOrigin,point);break;case 4: /绘制椭圆dc.Ellipse(CRect(m_ptOrigin,point);break; CView:OnLButtonUp(nFlags, point);在上述程序中,设置一个点,由于画一个白色的点看不清,所以画一个带颜色的点比较好,所以用到的函数是SetPixel,这也是CDC类的一个成员方法,该函数的声明形式如下:COLORREF SetPixel (POINT point,COLORREF crColor);该函数是在指定的点设置一个像素。其中第一个参数(point)是指定的点,第二个参数(crColor)是指定的颜色,此处画一个红点。绘制直线时,首先调用MoveTo函数移动到原点,然后调用LineTo函数绘制到终点。当用户选择椭圆和矩形选项时,就可画出相应的图形。4.1.2连续线和扇形的绘制为了绘制连续的线条,首先要得到线条的起点,这在前面已经实现。然后需要捕获鼠标移动过程中的每一个点,这可以通过捕获鼠标移动消息(WM_MOUSEMOVE)来实现。在此消息响应函数中,在依次捕获的各个点之间绘制一条条非常短的线段,从而就可以绘制出一条连续的线条。按照这一思路,我们开始增加程序的功能。首先为视类增加鼠标移动消息(WM_MOUSEMOVE)的响应函数(OnMouseMove)。这样,只要鼠标在应用程序窗口中移动时都会进入到这个消息响应函数中,但这并不能达到我们的期望,我们希望在鼠标左键按下后开始绘图。因此,我们需要有一个变量来表示鼠标左键是否按下这一状态,然后在鼠标移动消息响应函数中对这一变量进行判断。当此变量为真,即鼠标左键已经按下去,我们开始绘图。于是,为视类添加一个bool型的私有变量m_bDraw,当鼠标左键按下去时,此变量为真;当鼠标左键弹起时,此变量为假,这时,我们就不再绘制线条了。该变量在视类头文件中的定义代码如下:Private: bool m_bDraw;接下来在视类的构造函数中,将此变量初始化为false。m_bdraw=false;当鼠标左键按下去时,在视类的OnLButtonDown函数中将此变量初始化为true。m_bdraw=true;当鼠标左键弹起时,在视类的OnLButton函数中将此变量初始化为假。m_bdraw=false;然后在OnMouseMove函数中首先对m_bdraw变量进行判断,如果其值为真,说明鼠标左键已经按下去了,这时就可开始进行画线操作。还有一点需要注意,因为每绘制一条线段后,下次应该从这条线段的终点开始继续绘制。因此,绘制完当前线段后,应该修改线段的起点,将当前线段的终点作为下一条线段的起点,程序代码如下:void CGraphicView:OnMouseMove(UINT nFlags, CPoint point) /TODO: Add your message handler code here and/or call default/创建并获得设备描述 CClientDC dc(this); /创建宽度为1的实线红色画笔CPen pen (PS_SOLID, 1, RGB(255,0,0)); / /把创建的画笔选入设备描述 CPen *pOldpen=dc.SelectObject(&pen);if(m_bDraw=true)dc.MoveTo(m_ptOrigin); dc.LineTo(point);/修改线段的起点 m_ptOrigin=point;/恢复设备描述dc.SelectObject(pOldpen); CView:OnMouseMove(nFlags, point);如果在上面绘制连续线条的程序中,保持每段小直线的起点不变,即以鼠标左键按下时的起点为起点不变,分别绘制到鼠标移动点的直线,这时就会出现扇形的效果。也就是去掉上述代码OnMouseMove函数中修改线段起点的代码。程序代码如下:void CGraphicView:OnMouseMove(UINT nFlags, CPoint point) /TODO: Add your message handler code here and/or call default/创建并获得设备描述 CClientDC dc(this);/创建宽度为1的实线红色画笔CPen pen (PS_SOLID, 1, RGB(255,0,0));/把创建的画笔选入设备描述 CPen *pOldpen=dc.SelectObject(&pen);if(m_bDraw=true)dc.MoveTo(m_ptOrigin); dc.LineTo(point);/恢复设备描述dc.SelectObject(pOldpen); CView:OnMouseMove(nFlags, point);4.1.3画刷再为此程序添加一个子菜单,菜单名称为“画刷”,并为其添加三个菜单项,分别用来控制不同的画刷。MFC提供了一个CBrush类,可以用来创建画刷对象。画刷通常用来填充一块区域。在这里,我们只实现简单画刷的功能。简单画刷的程序代码如下:void CDrawView:OnLButtonUp(UINT nFlags, CPoint point) /创建一个红色画刷CBrush brush(RGB(255,0,0);/创建并获得设备描述表CClientDC dc(this);/利用红色画刷填充鼠标拖曳过程中形成的矩形区域dc.FillRect(CRect(m_ptOrigin,point),&brush);CBrush *pOldBrush = dc.SelectObject(pBrush);/绘制一个矩形dc.Rectangle(CRect(m_ptOrigin,point);/恢复先前的画刷dc.SelectObject(pOldBrush);m_bDraw = FALSE;CView:OnLButtonUp(nFlags, point);在简单画刷程序中,首先创建一个红色画刷;接着创建设备描述表对象;然后调用设备描述表对象的成员函数FillRect,利用指定的画刷填充一块指定的矩形区域,而鼠标拖动过程中的起点和终点就决定了需要填充的矩形区域,因此,代码中通过CRect类利用鼠标拖动的起点和终点构造了这快矩形区域。CRect类提供了多个构造函数,这里使用的是下面这种构造函数,即通过指定矩形区域的左上角和右下角这两个点来构造一块矩形区域。CRect(POINT topLeft,POINT bottomRight);代码中的CDC类的成员函数FillRect,该函数的功能是用指定的画刷填充一个矩形。该函数将填充全部的矩形,包括上左边界,但不填充右底边界。FillRect函数的声明如下:void FillRect (LPCRECT lpRect,CBrush* pBrush);该函数有两个参数,lpRect是指向一个RECT结构体或CRect对象的指针,该结构体或对象中包含了要填充的矩形的逻辑坐标。pBrush是指向用于填充矩形的画刷对象的指针。4.2【设置对话框】为程序添加一个设置对话框,允许用户指定画笔的类型、线宽,并让随后的绘图操作就使用用户指定的新设置值来进行绘制。为了实现这一功能,首先需要为程序添加一个对话框资源,在资源里新添加一个对话框类,并按下表修改对话框的属性。属性值IDIDD_DLG_SETTINGCaptionSettingFont宋体设置线型、线宽对话框的代码如下:void CGraphicView:OnSetting() /TODO: Add your command handler code hereCSettingDlg dlg; /定义一个对话框类的对象dlg.m_nLineWidth=m_nLineWidth; /对线宽赋值 dlg.m_nLineStyle=m_nLineStyle; /对线型赋值if(IDOK=dlg.DoModal()m_nLineWidth=dlg.m_nLineWidth; m_nLineStyle=dlg.m_nLineStyle;4.3【颜色】 MFC为我们提供了一个类:CColorDialog,可以很方便的创建这样的一个颜色对话框。void CGraphicView:OnColor() / TODO: Add your command handler code here CColorDialog dlg; /定义一个颜色对话框类的对象dlg.m_cc.Flags = CC_RGBINIT | |CC_FULLOPEN; dlg.m_cc.rgbResult=m_clr;if(IDOK=dlg.DoModal()m_clr=dlg.m_cc.rgbResult;4.4【打开与保存】void CGraphicView:OnFileOpen() / TODO: Add your command handler code hereHMETAFILE hmetaFile;hmetaFile=GetMetaFile(meta.wmf);m_dcMetaFile.PlayMetaFile(hmetaFile);DeleteMetaFile(hmetaFile);Invalidate();void CGraphicView:OnFileSave() / TODO: Add your command handler code here HMETAFILE hmetaFile;hmetaFile=m_dcMetaFile.Close();CopyMetaFile(hmetaFile,meta.wmf);m_dcMetaFile.Create();DeleteMetaFile(hmetaFile);第5章:结论与心得体会其实学任何一种语言都是一样的。需要勤奋+毅力=成功,这是我认为的一个公式。这里毅力和勤奋是个人因素。如果以前没有接触过编程语言的话,在接触VC前我建议你先学习一些基础语言,比如C等都是一些比较好学的基础语言,我当初就是从C语言过度学VC的。学基础语言的目的是学习语法结构和如何编写概念,只有你理解和掌握了这些编程用的工具才能学习高级语言。这些基础语言中我建议大家学C语言,其实VC就是C+也就是C语言的儿子,父亲学习起来比较容易上手,但遇到类似WINDOWS的程序的时候比较固执不容易沟通,在这种条件下才有了儿子,儿子比较开朗应变能力强,但是就因为他这些优点才使初学者难以掌握。 VC是C+语言,是一种面向对象的编程语言。他于基础语言不同点在于,基础语言是一条路走到底的(中断技术除外),而面向对象是等待你的指令才往下走,是被动的编程语言。这点是学习VC前必须扭转的概念。通过这次课程设计,我了解vc+是Windows平台上的C+编程环境,学习VC要了解很多Windows平台的特性并且还要掌握MFC、ATL、COM等的知识,难度比较大。Windows下编程需要了解Windows的消息机制以及回调(callback)函数的原理;MFC是Win32API的包装类,需要理解文档视图类的结构,窗口类的结构,消息流向等等;COM是代码共享的二进制标准,需要掌握其基本原理等等。基于我们这次用VC+编写了一个简单的画图板,功能不是很多,但是从中的到不少收获。主要有:1对项目和文档的了解,我们在编写程序时,要对不同的文件进行编写。其中项目就是文件的集合,包括头文件、源代码文件、资源文件。文档窗口也称编辑窗口,是用户进行输入或编辑头文件、源文件、资源的区域。在编辑文件时,为了增加程序的可读性,系统用绿色显示注释语句,用蓝色显示关键字。2菜单:我们绘制画图板时,就要建立一个“绘图”菜单。对于“绘图”菜单下还有几个子菜单项,通过建立菜单同时让它实现菜单上的命令,这就要我们对每个菜单项进行设置,诸如,ID、标题、快捷键、热键等。还有一些属性设置,设置不好,容易出错,所以每次建立菜单,都需谨慎设置,记住每个菜单对应的参数。3.文件打开与保存,对于我们绘制出一幅图片,那么我们就要把它保存下来。如果我们无法保存,我们做了也就没没什么意义了。对于图形的保存于打开,我们还存在很多问题,自定义保存不同文件夹下尚未解决,所以还需要我们进一步的学习和了解,争取实现我们心里多希望的。4.在编程时遇到了图像在变换大小时,原来的图形会消失,后来通过老师的讲解,及查看相关资料,这里涉及的一个重绘问题。经过多次修改,添加代码,才得以解决。所以我觉得学习VC+就要拿出那种坚持不懈的精神,做什么也是,只有你不放弃对它了解,才会实现我们自己想要的,这就要我们要不断的学习VC+,从中学习更多我们没了解到的知识。5对于CView视图,经过查询主要是负责内存数据与用户的交互。包括数据的显示、用户操作的响应(如菜单的选取、鼠标的响应)。最重要的是OnDraw(重画窗口),通常用CWnd:Invalidate()来启动它。另外,它通过消息映射表处理菜单、工具条、快捷键和其他用户消息。最后通过学习VC+,从中受益匪浅,更多的知识,还有待于我们去挖掘实现更多有趣的东西,同样它也是一个很强大的软件。同时我认为要想把编程语言学好,必须多实践,勤练习,遇到不懂得地方要及时问老师,与同学讨论,这样才能获得知识。参考文献【1】 VC+深入详解 孙鑫 余安萍 编著 电子工业出版社出版【2】 VC+程序设计基础教程 谭浩强 主编 宋金珂 高丽华 张迎新 编著 清华大学出版社出版【3】 MFC编程视频 孙鑫老师讲解【4】 网上借鉴了一下别人的代码附录调试报告:1.当程序运行出来后,在设置菜单中选择线型中间断线,在白屏中左键选中一点,移动鼠标再左键选中一点,图中出现一条直线颜色选择粉色2.在绘图中选择矩形,在白屏中左键选中一点,移动鼠标再左键选中一点,图中出现一个矩阵,颜色选择黄色3.再在画一个紫色矩阵,用画刷画一个红色矩阵,一个绿色矩阵4.在绘图中选择扇形,在白屏中左键选中一点,移动鼠标再左键选中一点,图中出现一个扇形,颜色选择为黑色5.在绘图中选择圆形,在白屏中左键选中一点,移动鼠标再左键选中一点,图中出现一个椭圆形,颜色选择为紫色测试结果:关键源代码:/ GraphicView.cpp : implementation of the CGraphicView class#include stdafx.h#include Graphic.h#include GraphicDoc.h#include GraphicView.h#include SettingDlg.h#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/ CGraphicViewIMPLEMENT_DYNCREATE(CGraphicView, CView)BEGIN_MESSAGE_MAP(CGraphicView, CView)/AFX_MSG_MAP(CGraphicView)ON_COMMAND(IDM_DOT, OnDot)ON_COMMAND(IDM_LINE, OnLine)ON_COMMAND(IDM_RECTANGLE, OnRectangle)ON_COMMAND(IDM_ELLIPSE, OnEllipse)ON_COMMAND(IDM_SHANXING, OnShanxing)ON_COMMAND(IDM_LIANXUXIAN, OnLianxuxian)ON_WM_LBUTTONDOWN()ON_WM_LBUTTONUP()ON_WM_MOUSEMOVE()ON_COMMAND(IDM_SETTING, OnSetting)ON_COMMAND(IDM_COLOR, OnColor)ON_COMMAND(IDM_JDHS, OnJdhs)ON_COMMAND(IDM_WTHS, OnWths)ON_COMMAND(IDM_TMHS, OnTmhs)ON_COMMAND(ID_FILE_OPEN, OnFileOpen)ON_COMMAND(ID_FILE_SAVE, OnFileSave)/AFX_MSG_MAP/ Standard printing commandsON_COMMAND(ID_FILE_PRINT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_DIRECT, CView:OnFilePrint)ON_COMMAND(ID_FILE_PRINT_PREVIEW, CView:OnFilePrintPreview)END_MESSAGE_MAP()/ CGraphicView construction/destructionCGraphicView:CGraphicView()/ TODO: add construction code here m_nDrawType=0;m_ptOrigin=0;m_bDraw=false; m_nLineWidth=0;m_nLineStyle=0;m_clr=(255,0,0); m_dcMetaFile.Create();CGraphicView:CGraphicView()BOOL CGraphicView:PreCreateWindow(CREATESTRUCT& cs)/ TODO: Modify the Window class or styles here by modifying/ the CREATESTRUCT csreturn CView:PreCreateWindow(cs);/ CGraphicView drawingvoid CGraphicView:OnDraw(CDC* pDC)CGraphicDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);/ TODO: add draw code for native data here HMETAFILE hmetaFile;hmetaFile=m_dcMetaFile.Close();pDC-PlayMetaFile(hmetaFile);m_dcMetaFile.Create();m_dcMetaFile.PlayMetaFile(hmetaFile);DeleteMetaFile(hmetaFile);/ CGraphicView printingBOOL CGraphicView:OnPreparePrinting(CPrintInfo* pInfo)/ default preparationreturn DoPreparePrinting(pInfo);void CGraphicView:OnBeginPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add extra initialization before printingvoid CGraphicView:OnEndPrinting(CDC* /*pDC*/, CPrintInfo* /*pInfo*/)/ TODO: add cleanup after printing/ CGraphicView diagnostics#ifdef _DEBUGvoid CGraphicView:AssertValid() constCView:AssertValid();void CGraphicView:Dump(CDumpContext& dc) constCView:Dump(dc);CGraphicDoc* CGraphicView:GetDocument() / non-debug version is inlineASSERT(m_pDocument-IsKindOf(RUNTIME_CLASS(CGraphicDoc);return (CGraphicDoc*)m_pDocument;#endif /_DEBUG/ CGraphicView message handlersvoid CGraphicView:OnDot() / TODO: Add your command handler code herem_nDrawType=1;void CGraphicView:OnLine() / TODO: Add your command handler code herem_nDrawType=2;void CGraphicView:OnRectangle() / TODO: Add your command handler code herem_nDrawType=3;void CGraphicView:OnEllipse() / TODO: Add your command handler code herem_nDrawType=4;void CGraphicView:OnShanxing() / TODO: Add your command han

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论