图形编辑器VC++_课设说明书.doc_第1页
图形编辑器VC++_课设说明书.doc_第2页
图形编辑器VC++_课设说明书.doc_第3页
图形编辑器VC++_课设说明书.doc_第4页
图形编辑器VC++_课设说明书.doc_第5页
免费预览已结束,剩余25页可下载查看

下载本文档

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

文档简介

唐山学院课程设计唐 山 学 院面向对象程序设计课 程 设 计 绘图应用程序设计题 目 07计对本系 (部) 计算机科学与技术系 李志飞班 级 4070207116姓 名 郭琳虹学 号 指导教师 2010 年 7 月 12 日至 7 月 16 日 共 1 周2010年 7 月 16 日面向对象程序设计 课程设计任务书一、设计题目、内容及要求1、设计题目:绘图应用程序设计2、设计内容及要求:利用MFC应用程序、图形处理的基本知识,设计一个绘图应用程序。程序具有以下功能:图形绘制功能:直线、椭圆、矩形、文本等;图形修改功能:线条颜色、线条类型、填充颜色、填充方式的设置;数据保存功能:能够把图形数据保存到文件中。二、要求的设计成果(课程设计说明书、设计实物、图纸等)1、用Visual C+进行编码,实现应用程序的功能。注重编码质量,代码要有适当的注释;2、撰写课程设计说明书一份,不少于2000字。课程设计说明书应包括封面、任务书、正文(设计的基本思路、设计的步骤及主要代码解释)、参考文献(资料)、附录(程序代码)等内容。三、进程安排7月12日:完成需求分析,确定程序功能,确立程序设计思想;7月13日7月14日:进行详细设计,实现编码;7月15日:进行程序测试,完善编码;撰写设计说明书,准备答辩;7月16日:答辩。四、主要参考资料1 王育坚Visual C+面向对象编程教程第2版北京:清华大学出版社,20082 侯俊杰深入浅出MFC第2版广东:南方出版社,20073 严华峰 等Visual C+课程设计案例精编北京:中国水利水电出版社,2004指导教师(签名):教研室主任(签名):注:可以附页课程设计成绩评定表出勤情况出勤天数 缺勤天数成绩评定出勤情况及设计过程表现(20分)课设答辩(20分)设计成果(60分)总成绩(100分)提问(答辩)问题情况综合评定 指导教师签名: 年 月 日唐山学院课程设计1 引言本程序使用Visual C+ 6.0 MFC1可视化开发环境。下面主要介绍在说明书中使用最频繁的、与图形处理密切相关的组件及其属性和方法。1.1 颜色在计算机图形处理软件中,通常颜色是根据红、绿、蓝三种颜色的饱和度来定义的,这种模型称为RGB模型。任何颜色都是红、绿、蓝三种基本色的不同组合组成,因此每种颜色都可以用红、绿、蓝基本色来表示。Red、Green、Blue用来表示基本色构成的三个分量,他们的取值为0-255,最小值表示没有颜色,最大值255表示最高的饱和度。RGB即是代表红、绿、蓝三个通道的颜色,这个标准几乎包括了人类视力所能感知的所有颜色,是目前运用最广的颜色系统之一。1.2 画笔CPen封装了Windows图形设备接口的画笔功能。在用绘图的时候,需要首先设置画笔的属性。对每一个画笔均可以选择不同的宽度,颜色,线型等等。1.3 画刷CBrush类封装了Windows图形设备接口的画刷的API函数,包括画刷的实颜色、阴影、或模式。要使用CBrush,先用构造函数构造一个CBrush对象,然后为需要用画刷的成员函籽传递一个指针或引用。1.4 画图CDC类支持设备描述表,提供Windows API函数。CDC对象提供用于设备描述表如打印机或显示器的成员函数。CDC2类提供一个包含Win32 API的成员函数的数组,它支持所有的设备描述表的操作,如使用各种绘画工具、GDI画刷和字体对象选择、对颜色和调色板的操作等,以及拥有本文中提到的画线和画简单形状如多边形、矩形、圆的功能。2 总体设计2.1 图形编辑器的功能本程序设计要求具有基本图形包括点、直线、折线、多边形、圆、矩形。绘制时先选择所绘制图形类型3,然后用鼠标完成绘制,可对其进行选中、删除操作,并且都可编辑其基本属性,如颜色、线宽等。同时编辑时必须以选中状态才可进行编辑。本程序设计还要求能够将所绘制图形成功保存进文件及能够将所保存文件成功读取,并显示出来,并且实现对所读取图形的编辑功能与再保存功能。程序的系统功能模块图如图2-1系统功能模块图所示。绘图应用程序设计基本图形绘制基本图形编辑保存与读取图2-1 系统功能模块图2.2 设计的基本思路首先,对于基本图形的创建,可以采用继承的方法。建立一个基类,拥有所有图形的基本结构,在这里我定义了一个头结构,和一个格式结构来定义图形的基本参数,另外还包括一些成员函数。然后针对每个图形创建不同的类,这些类重载基类中成员函数,定义自身图形的绘制过程。其次,对于图形的编辑。对每一个图形可以进行选中,删除,和修改基本属性。要选中图形时,就要对鼠标的每一次单击事件4,进行一次循环,判断是否点中某个图形,如点中,这个图形绘制选中标志,否则取消所有对象选中状态。编辑图形时,应在选出中的基础上进行对选中图形的编辑,可建一个属性对话框,进行属性的显示,修改操作,或建立一个右键菜单,进行属性编辑和一些图形操作。再次,文件保存时,本文采用索引散列文件的方法,用三个文件进行存储,一个存储索引数组,一个存储图形对象结构体,一个存储图形对象的点坐标。采用此方法,主要是考虑针对每个图形点坐标个数不一样,因此每个对象所占存储空间大小不一样。这样若进行删除,修改等操作将出现文件碎片,出现空间浪费。3 详细设计3.1 基本图形绘制模块本模块中将简绍画线和画简单形状如多边形、矩形、圆等功能,如图3-1基本图形模块图所示。基本图形绘制点的绘制直线的绘制折线的绘制多边形的绘制圆的绘制矩形的绘制文字显示图3-1 基本图形模块图3.1.1 绘制直线 绘制直线涉及到两个方法:MoveTo和LineTo。MoveTo(int startx,int starty)的任务是设置当前画笔的位置到(startx,starty),而不进行任何绘图工作。然后可以调用LineTo(int endx,int endy)来画直线。它从当前画笔的位置画一条直线到点(endx,endy),并将当前的画笔位置改变为(endx,endy)。3.1.2 绘制椭圆原型:BOOL Ellipse(int x1,int y1,int x2,int y2);用途:画一个椭圆。其中心为限定矩形的中心。该限定矩形不包括右边和底部的坐标。用当前画刷填充它的内部区域,并用当前画笔画此椭圆。3.1.3 绘制多边形原型:BOOL Polypon(LPPOINT lpPoints,int nCount);用途:画一多边形,该多边形由两个或两个以上由直线连接的点组成。系统自动封闭多边形。填充时用当前设置的画刷进行填充,并且当前画笔画多边形。3.1.4 绘制矩形原型:Rectangle(int X1, int Y1, int X2, int Y2);用途:用当前画笔画一个矩形,并用当前画刷填充该矩形内部。3.2 基本图形编辑模块针对每个图形5,都拥有一些基本属性信息,以及相应的坐标信息。包括图形头结构、图形格式结构、图形坐标信息。其中图形头结构包括图形ID、保存类型、图形类别、图形所占点坐标个数、图形中心点位置、图形所占矩形区域;图形格式结构包括图形线宽、线颜色、填充色等;图形坐标信息是根据图形类型来确定所占点坐标个数。如点:仅拥有一个坐标。直线:拥有两个坐标。折线:拥有大于2个坐标。多边形:拥有大于2个坐标。圆:拥有两个坐标。矩形:拥有两个坐标。这个模块是针对每个图形,可对其进行选中、删除操作,并且都可编辑其基本属性,如颜色、线宽等。同时编辑时必须以选中状态才可进行编辑,如图3-2基本图形编辑模块图所示。图形选中基本图形的编辑图形删除修改属性图3-2 基本图形编辑模块图3.3 图形绘制方法点的绘制:点一个点,以此点为中心绘制半径为2的圆,作为点。方法为调用Ellipse函数。直线的绘制:确定两点坐标后,开始绘制。方法为调用MoveTo,LineTo函数。折线的绘制:确定折线坐标后,开始直线的连续绘制即可。多边形的绘制:确定折线坐标后,开始绘制。方法为调用Polygon函数。圆6的绘制:确定圆心坐标后,开始绘制。方法为调用Ellipse函数。矩形的绘制:确定矩形坐标后,开始绘制。方法为调用Rectangle函数。图形绘制的效果图如图3-3所示。 图3-3 基本图形绘制效果图3.4 图形绘制过程采用消息响应方式,先选择一种图形类型后,由鼠标负责在视图窗口中确定每个图形的点坐标位置,然后完成图形绘制,并自动存储到内存7。主要消息事件为WM_LBUTTONDOWN,WM_MOUSEMOVE,WM_RBUTTONUP。当选择一种图形类型后,在客户区点击左键后,判断图形类型,若为点,则完成绘制与存储。若为直线,则开始响应WM_MOUSEMOVE事件,绘制鼠标移动期间直线,当再次点击鼠标左键完成绘制与存储。若为折线,则开始连续直线的绘制方法,每点击一次左键完成一段直线的绘制,直到点击右键,响应WM_RBUTTONDOWN事件后,完成绘制与存储。若为多边形,则方法同折线,只是绘制时采用绘制多边形方法并存储。若为圆,则开始响应WM_MOUSEMOVE事件,绘制鼠标移动期间的动态圆,当再次点击左键后,完成绘制与存储。若为矩形,则方法同圆,只是绘制时采用绘制圆的方法并存储。3.5 图形构造与存储方法本程序是采用数组的方式保存图形对象。声明为:CTypedPtrArray sogOA8;因每个图形继承自同一个基类,并且基类拥有图形的基本结构信息,因此存储时完全可按基类来存储。3.6 图形编辑方法运行程序后,菜单栏中选择修改图形属性菜单项,之后将弹出修改图形对话框,如图3-4修改图形对象属性对话框图,即可进行修改图形的线条颜色、线条类型、填充颜色、填充方式等属性。 图3-4 修改图形对象属性对话框图3.7 保存与读取模块分析图形的基本结构信息可知每个图形的头结构9与格式结构数据的大小是一样的,只是点坐标个数的不一致,因此,由图形大小的不一致,而导致文件的保存问题,在实际中可以将每个图形对象的信息分别保存在不同的文件中。即对图形的头结构与格式结构,单独存储进一个文件,而每个图形的点坐标结构存储在一个单独的文件中,这样可以保证在图形的编辑过程中,文件中不会出现碎片。每个图形ID唯一,因此将ID作为每个图形的索引值,通过对指定值求余的方法,计算hash地址。若有重复的计算结果,即有相同的hash地址值,那么采用向后链接的方法实现索引。将文件的索引单独保存到一个文件中,这样便于索引数组的读取与保存,同时也易于其他文件的读取与保存。图形对象存入文件9实现。根据存储图形对象的数组,依次将数组中的对象存入文件,就单个对象来说,要实现存入文件,必须先根据ID值,计算其hash地址后,修改索引表以存储其在文件中位置。图3-4保存与读取模块图为本模块结构图。文件保存文件读取保存与读取 图3-7 保存与读取模块图4 总结通过阅读大量文献资料,对图形与文件的操作有了较深的认识。在了解编辑环境的基础上实现的图形的绘制,对编程环境有了进一步的掌握。同时,对类的机制有了更进一步的了解。程序实现了基本图形,如点、直线、折线、圆、多边形、矩形的绘制与保存和文字的输出。在绘制这些基本图形的过程中,直接调用了编程环境中自带的绘图函数,并没有研究这些基本图形的绘制算法。在每种图形的绘制过程中,都由消息来响应,通过鼠标的操作,完成了图形的绘制。同时本程序还可以对图形进行删除、修改等功能。在文件保存方面,基本上已经实现了一个软件的保存与读取操作,可以通过工具栏上的保存和打开按钮实现。总之,程序实现了点、直线、折线、多边形、圆、矩形的绘制和文字的显示,在此基础上,可以相互结合,生成一些复杂的图形。但本程序只是一个简单的图形编辑器,无法合成很复杂的图形。参考文献1 王育坚Visual C+面向对象编程教程北京:清华大学出版社,20082 侯俊杰深入浅出MFC第2版广东:南方出版社,20073 严华峰Visual C+课程设计案例精编北京:中国水利水电出版社,20044 侯识忠等数据结构算法Visual C+ 6.0程序集北京:中国水利水电出版社,20055 郭小刚,金星C/C+程序设计教程人民邮电出版社,20046 蔡士杰等译计算机图形学北京:电子工业出版社,1998 7 刘峻Delphi数字图像处理及高级应用北京:科学出版社,20038 陆枫,陈传波计算机图形学基础北京:电子工业出版社,20029 倪田平编著计算机图形学北京:北京大学出版社,1999附录*基本图形绘制模块*void CGraphicsEditSystemView:OnDraw(CDC* pDC)CGraphicsEditSystemDoc* pDoc = GetDocument();ASSERT_VALID(pDoc);for (int i = 0;i sogOA.GetSize();i+)pDoc-sogOA.GetAt(i)-Draw(pDC);/ TODO: add draw code for native data hereCPen PenNew;/创建画笔CPen *pPenOld;/定义画笔CBrush BrushNew;/创建画刷CBrush *pBrushOld;/创建画刷PenNew.CreatePen(com1,1,RGB(0,0,0);/创建画笔对象BrushNew.CreateHatchBrush(com2,RGB(red,green,blue);/创建设定的画刷对象pPenOld=pDC-SelectObject(&PenNew);/新创建的画笔选入设备描述表pBrushOld=pDC-SelectObject(&BrushNew);/创建新画刷选入设备描述表if(m_rect)pDC-Rectangle(x1,y1,x2,y2);if(m_circle)pDC-Ellipse(x1,y1,10*x1,10*y1); pDC-SelectObject(pPenOld); BrushNew.DeleteObject();LRESULT CGraphicsEditSystemView:WindowProc(UINT message, WPARAM wParam, LPARAM lParam) / TODO: Add your specialized code here and/or call the base classint aa=operationstate;/ =-1:正常状态/ =0: 画点/ =1: 画直线/ =2: 画折线/ =3: 画多边形/ =4: 画圆/ =5: 画矩形switch (message)case WM_LBUTTONDOWN: if (aa = -1) CGraphicsEditSystemDoc * pDoc=GetDocument();CDC *pDC=GetDC();mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);for(int i=0;isogOA.GetSize();i+)/点中对象,将对象状态改为选中if (pDoc-sogOA.GetAt(i)-Pointed(mPointNow.x,mPointNow.y,2) = true) & (pDoc-sogOA.GetAt(i)-bSelected = false) SelectedId = pDoc-sogOA.GetAt(i)-geHeader.m_ID; pDoc-sogOA.GetAt(i)-bSelected = true; CSeletedGE * sge=new CSeletedGE();/ sge-Index=i; if (select) for (int j = 0;jSelectedGE.GetSize();j+) pDoc-sogOA.GetAt(pDoc-SelectedGE.GetAt(j)-Index)-bSelected = false; InvalidateRect(NULL,TRUE); pDoc-SelectedGE.RemoveAll(); pDoc-SelectedGE.Add(sge); else pDoc-SelectedGE.Add(sge); pDoc-sogOA.GetAt(i)-Draw(pDC); selected = true; if(selected)elsefor (int j = 0;jSelectedGE.GetSize();j+) pDoc-sogOA.GetAt(pDoc-SelectedGE.GetAt(j)-Index)-bSelected = false;InvalidateRect(NULL,TRUE); selected = false; if(aa = 0)/画点mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);CGraphicsEditSystemDoc * pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this);sGrapElemHeader geHdr;sGrapElemFormat geFmt;sPointPosition * psPstn;psPstn=new sPointPosition1; CVNormPoint * VNPoint; /初始化点图形的数据格式 geFmt=pDoc-beginElemFormat;/初始化点图形的数据头geHdr.GrapElemType=0;geHdr.SaveType = 3;pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1;geHdr.m_ID=pDoc-MaxNumElemId;geHdr.m_PointsNumber=1;psPstn0.x = mPointNow.x;psPstn0.y = mPointNow.y;/构造该点图形对象VNPoint=new CVNormPoint(geFmt,geHdr,psPstn);/绘制该点图形对象,Draw函数将根据该图元的格式成员函数,/选择不同的方式绘制该对象VNPoint-Draw(pDC);/保存该点对象pDoc-sogOA.Add(VNPoint); if(aa=6)/输出文字,坐标还得改CGraphicsEditSystemDoc *pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this); /设置文字 TEXTMETRIC tm; CFont fn; fn.CreatePointFont(200,华文行楷,pDC); CFont *Oldfn=pDC-SelectObject(&fn); pDC-GetTextMetrics(&tm); CreateSolidCaret(tm.tmAveCharWidth/8,tm.tmHeight); pDC-TextOut(mPointNow.x,mPointNow.y,这是一个画图程序,请画图!); ShowCaret();if(aa = 1)/画直线CGraphicsEditSystemDoc * pDoc=GetDocument();CClientDC *pDC=new CClientDC(this);/设置画笔CPen pen(0,1,RGB(0,0,255);CPen*pOldPen=pDC-SelectObject(&pen);pDC-SetROP2(R2_COPYPEN);/用户鼠标点在屏幕中的位置mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);float xx1=0.00,yy1=0.00,xx2=0.00,yy2=0.00;if(PushNumb=0)PushNumb+;mPointOrigin=mPointNow;mPointOld=mPointNow;SetCapture();else if(PushNumb=1)sGrapElemHeader geHdr;geHdr.m_PointsNumber=2;sGrapElemFormat geFmt;sPointPosition * psPstn;psPstn=new sPointPositiongeHdr.m_PointsNumber;CVNormLine * VNLine;geFmt=pDoc-beginElemFormat;/初始化一条直线图形的数据头geHdr.GrapElemType=1;geHdr.SaveType = 3;pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1;geHdr.m_ID=pDoc-MaxNumElemId;psPstn0.x=mPointOrigin.x;psPstn0.y=mPointOrigin.y;psPstn1.x=mPointNow.x;psPstn1.y=mPointNow.y;/构造该直线图形对象VNLine=new CVNormLine(geFmt,geHdr,psPstn);/绘制该直线图形对象VNLine-Draw(pDC);/保存该直线对象pDoc-sogOA.Add(VNLine);PushNumb=0;ReleaseCapture();/ReleaseDC(pDC);pDC-SelectObject(pOldPen); if(aa=2|aa=3)/画折线或者多边形区域mPointNow.x=LOWORD (lParam);mPointNow.y=HIWORD (lParam);CPointPosition * ps=new CPointPosition();ps-x=mPointNow.x;ps-y=mPointNow.y;pPntPstnArray.Add(ps);if(PushNumb=0)SetCapture();mPointOrigin=mPointNow;mPointOld=mPointNow;elsemPointOrigin=mPointOld;mPointOld=mPointNow;PushNumb+; if(aa = 4)/画圆 CGraphicsEditSystemDoc * pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this); /设置画笔 CPen pen(0,1,RGB(0,0,255); CPen*pOldPen=pDC-SelectObject(&pen); CBrush * pOldBrush=(CBrush * )pDC-SelectStockObject(NULL_BRUSH); mPointNow.x=LOWORD (lParam); mPointNow.y=HIWORD (lParam); if(PushNumb=0) PushNumb+; mPointOrigin=mPointNow; mPointOld=mPointNow; SetCapture(); else if(PushNumb=1) sGrapElemHeader geHdr; geHdr.m_PointsNumber=2; sGrapElemFormat geFmt; sPointPosition * psPstn; psPstn=new sPointPositiongeHdr.m_PointsNumber; CVNormCircle * VNCircle; geFmt=pDoc-beginElemFormat; geHdr.GrapElemType = 4; pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1; geHdr.m_ID=pDoc-MaxNumElemId; geHdr.SaveType = 3; /初始化圆图形的点数据 psPstn0.x=mPointOrigin.x; psPstn0.y=mPointOrigin.y; psPstn1.x=mPointNow.x; psPstn1.y=mPointNow.y; /构造该圆图形对象 VNCircle=new CVNormCircle(geFmt,geHdr,psPstn); pDC-SetROP2(R2_NOT); pDC-Ellipse(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y); /绘制该圆图形对象 VNCircle-Draw(pDC); /保存该圆对象 pDoc-sogOA.Add(VNCircle); PushNumb=0; ReleaseCapture(); /ReleaseDC(pDC); pDC-SelectObject(pOldPen); pDC-SelectObject(pOldBrush); if(aa = 5)/画矩形 CGraphicsEditSystemDoc * pDoc=GetDocument(); CClientDC *pDC=new CClientDC(this); /设置画笔 CPen pen(0,1,RGB(0,0,255); CPen*pOldPen=pDC-SelectObject(&pen); CBrush * pOldBrush=(CBrush * )pDC-SelectStockObject(NULL_BRUSH); pDC-SetROP2(R2_COPYPEN); mPointNow.x=LOWORD (lParam); mPointNow.y=HIWORD (lParam); if(PushNumb=0) PushNumb+; mPointOrigin=mPointNow; mPointOld=mPointNow; SetCapture(); else if(PushNumb=1) sGrapElemHeader geHdr; geHdr.m_PointsNumber=2; sGrapElemFormat geFmt; sPointPosition * psPstn; psPstn=new sPointPositiongeHdr.m_PointsNumber; CVNormRectangular * VNRect; geFmt=pDoc-beginElemFormat; geHdr.GrapElemType = 5; pDoc-MaxNumElemId = pDoc-MaxNumElemId + 1; geHdr.m_ID=pDoc-MaxNumElemId; geHdr.SaveType = 3; /初始化矩形图形的点数据 psPstn0.x=mPointOrigin.x; psPstn0.y=mPointOrigin.y; psPstn1.x=mPointNow.x; psPstn1.y=mPointNow.y; /构造该矩形图形对象 VNRect=new CVNormRectangular(geFmt,geHdr,psPstn); /擦除OnMouseMove最后一点时画的矩形 pDC-SetROP2(R2_NOT); pDC-Rectangle(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y); /绘制该矩形图形对象 VNRect-Draw(pDC); /保存该矩形对象 pDoc-sogOA.Add(VNRect); PushNumb=0; ReleaseCapture(); /ReleaseDC(pDC); pDC-SelectObject(pOldPen); pDC-SelectObject(pOldBrush); break;case WM_MOUSEMOVE:mPointNow.x=LOWORD (lParam); mPointNow.y=HIWORD (lParam);if(aa = 1)/画直线CClientDC *pDC=new CClientDC(this);/设置画笔CPen pen(0,0,RGB(0,0,0);CPen*pOldPen=pDC-SelectObject(&pen);pDC-SetROP2(R2_NOT);if(PushNumb=1)if(mPointOld!=mPointNow)pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointOld);pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointNow);mPointOld=mPointNow;pDC-SelectObject(pOldPen);delete pDC;if(aa=2|aa=3)&PushNumb=1)CClientDC *pDC=new CClientDC(this);OnPrepareDC(pDC); /设置画笔CPen pen(0,0,RGB(0,0,0);CPen*pOldPen=pDC-SelectObject(&pen);pDC-SetROP2(R2_NOT);if(mPointOld!=mPointNow)pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointOld);pDC-MoveTo(mPointOrigin);pDC-LineTo(mPointNow);mPointOld=mPointNow;pDC-SelectObject(pOldPen);delete pDC;if(aa = 4)/画圆CClientDC *pDC=new CClientDC(this);/设置画笔CPen pen(PS_DASH,1,RGB(0,0,0);CPen * pOldPen=pDC-SelectObject(&pen);CBrush * pOldBrush=(CBrush *)pDC-SelectStockObject(NULL_BRUSH);pDC-SetROP2(R2_NOT);if(PushNumb=1)if(mPointOld!=mPointNow)pDC-Ellipse(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y);pDC-Ellipse(mPointOrigin.x,mPointOrigin.y,mPointNow.x,mPointNow.y);mPointOld=mPointNow;pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);delete pDC;if(aa = 5)/画矩形CClientDC *pDC=new CClientDC(this);/设置画笔CPen pen(PS_DASH,1,RGB(0,0,0);CPen * pOldPen=pDC-SelectObject(&pen);CBrush * pOldBrush=(CBrush *)pDC-SelectStockObject(NULL_BRUSH);pDC-SetROP2(R2_NOT);if(PushNumb=1)if(mPointOld!=mPointNow)pDC-Rectangle(mPointOrigin.x,mPointOrigin.y,mPointOld.x,mPointOld.y);pDC-Rectangle(mPointOrigin.x,mPointOrigin.y,mPointNow.x,mPointNow.y);mPointOld=mPointNow;pDC-SelectObject(pOldPen);pDC-SelectObject(pOldBrush);delete pDC;break;case WM_RBUTTONDOWN: if (aa = 2) CGraphicsEditSystemDoc * pDoc=GetDocument();CClientDC *pDC=new CClientDC(this);sGrapElemHeader geHdr;sGrapElemFormat geFmt;sPointPosition * psPstn;psPstn=new sPointPositionpPntPstnArray.GetSize();CVNormPolyline * VNPolyline

温馨提示

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

评论

0/150

提交评论