实现图形的重绘_第1页
实现图形的重绘_第2页
实现图形的重绘_第3页
实现图形的重绘_第4页
全文预览已结束

下载本文档

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

文档简介

实现图形的重绘在所给代码的基础上实现图形的重绘(窗口大小改变后所绘制图形不丢失)。1、修改stdafx.h删除 #include 增加#include #include #include 2、修改项目属性将 【配置属性】-【常规】-【MFC的使用】修改为 在共享的DLL中使用MFC3、修改FirstWnd.h增加以下代码:typedef struct tagDrawLinePOINT ptStart;POINT ptEnd;DRAWLINE,*PDRAWLINE;typedef struct tagDrawRectRECT rect;DRAWRECT,*PDRAWRECT;typedef enum tagSHAPESHAPELINE,SHAPERECT,SHAPEELLIPSESHAPE;typedef struct tagDrawShapeSHAPE shape;UINT penWidth;DWORD color;BOOL bFill;unionDRAWLINE ShapeLine;DRAWRECT ShapeRect;DRAWSHAPE,*PDRAWSHAPE;4、修改firstWnd.cpp中 DrawStru的定义,增加CArray graphicArray;这一句,修改后的代码为typedef struct tagDrawStruenum DrawTool shape;BOOL bMouseDown;BOOL bFill;int xBegin,yBegin ,x,y;COLORREF color;HPEN hPen;HBRUSH hBr;int lineWidth;CArray graphicArray; DRAWSTRU ,*PDRAWSTRU;5、修改void LineMouseUp函数在函数的最后增加以下代码DRAWSHAPE myShape;myShape.shape=SHAPELINE;myShape.bFill=dr.bFill;myShape.color=dr.color;myShape.penWidth=1;myShape.ShapeLine.ptStart.x=dr.xBegin;myShape.ShapeLine.ptStart.y=dr.yBegin;myShape.ShapeLine.ptEnd.x=dr.x;myShape.ShapeLine.ptEnd.y=dr.y;dr.graphicArray.Add(myShape);6、修改void EllipseMouseUp函数在函数的最后增加以下代码DRAWSHAPE myShape;myShape.shape=SHAPEELLIPSE;myShape.bFill=dr.bFill;myShape.color=dr.color;myShape.penWidth=1;myShape.ShapeRect.rect.left=dr.xBegin;myShape.ShapeRect.rect.top=dr.yBegin;myShape.ShapeRect.rect.right=dr.x;myShape.ShapeRect.rect.bottom=dr.y;dr.graphicArray.Add(myShape);7、修改void RectMouseUp函数参考6的代码8、修改WM_PAINT处理代码在窗口函数的开始部分增加以下定义:HPEN hPen,hOldPen;HBRUSH hBr,hOldBr;在/Todo后面增加以下代码int i;DRAWSHAPE myShape;for(i=0;idr.graphicArray.GetSize();i+)myShape=dr.graphicArrayi;hPen=CreatePen(PS_SOLID,myShape.penWidth,myShape.color);if(myShape.bFill)hBr=CreateSolidBrush(myShape.color);elsehBr=(HBRUSH)GetStockObject(NULL_BRUSH);hOldPen=(HPEN)SelectObject(hdc,hPen);hOldBr=(HBRUSH)SelectObject(hdc,hBr);switch(myShape.shape)case SHAPELINE:MoveToEx(hdc,myShape.ShapeLine.ptStart.x,myShape.ShapeLine.ptStart.y,NULL);LineTo(hdc,myShape.ShapeLine.ptEnd.x,myShape.ShapeLine.ptEnd.y);break;case SHAPEELLIPSE:Ellipse(hdc,myShape.ShapeRect.rect.left,myShape.ShapeRect.rect.top,myShape.ShapeRect.rect.right,myShape.ShapeRect.rect.bottom);break;case SHAPERECT:Rectangle(hdc,myShape.ShapeRect.rect.left,myShape.ShapeRect.rect.top,myShape.ShapeRect.rect.right,myShape.ShapeRect.rect.bottom);break;SelectObject(hdc,hOldPen);DeleteObject(hPen);if(myShape.bFill)SelectObject(hdc,hOldBr);DeleteObject(hBr);9、在菜单资源中增加菜单项在【File】菜单下增加【打开】菜单 Caption 为打开(&O),ID为 IDM_FILE_OPEN【保存】菜单 Caption 为保存(&S),ID为 IDM_FILE_SAVE10、在窗口函数中增加菜单处理代码如下:case IDM_FILE_SAVE:CFile file(TEXT(.g.dat),CFile:modeCreate|CFile:modeWrite);CArchive ar(&file,CArchive:store);dr.graphicArray.Serialize(ar);break;case IDM_FILE_OPEN:CFile file(TEXT(.g.dat),

温馨提示

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

评论

0/150

提交评论