欢迎来到天天文库
浏览记录
ID:50955908
大小:42.00 KB
页数:4页
时间:2020-03-16
《实现图形的重绘.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、实现图形的重绘在所给代码的基础上实现图形的重绘(窗口大小改变后所绘制图形不丢失)。1、修改stdafx.h删除#include增加#include#include#include2、修改项目属性将【配置属性】-》【常规】-》【MFC的使用】修改为在共享的DLL中使用MFC3、修改FirstWnd.h增加以下代码:typedefstructtagDrawLine{POINTptStart;POINTptEnd;}DRAWLINE,*PDRAWLINE;typedefstructta
2、gDrawRect{RECTrect;}DRAWRECT,*PDRAWRECT;typedefenumtagSHAPE{SHAPELINE,SHAPERECT,SHAPEELLIPSE}SHAPE;typedefstructtagDrawShape{SHAPEshape;UINTpenWidth;DWORDcolor;BOOLbFill;union{DRAWLINEShapeLine;DRAWRECTShapeRect;};}DRAWSHAPE,*PDRAWSHAPE;4、修改firstWnd.cpp中DrawStru的定义,增加CArray3、E,DRAWSHAPE&>graphicArray;这一句,修改后的代码为typedefstructtagDrawStru{enumDrawToolshape;BOOLbMouseDown;BOOLbFill;intxBegin,yBegin,x,y;COLORREFcolor;HPENhPen;HBRUSHhBr;intlineWidth;CArraygraphicArray;}DRAWSTRU,*PDRAWSTRU;5、修改voidLineMouseUp函数在函数的最后增加以下代码DRAWSHAPEmyShape4、;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、修改voidEllipseMouseUp函数在函5、数的最后增加以下代码DRAWSHAPEmyShape;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(6、myShape);7、修改voidRectMouseUp函数参考6的代码8、修改WM_PAINT处理代码在窗口函数的开始部分增加以下定义:HPENhPen,hOldPen;HBRUSHhBr,hOldBr;在//Todo后面增加以下代码inti;DRAWSHAPEmyShape;for(i=0;i7、Br=CreateSolidBrush(myShape.color);}else{hBr=(HBRUSH)GetStockObject(NULL_BRUSH);}hOldPen=(HPEN)SelectObject(hdc,hPen);hOldBr=(HBRUSH)SelectObject(hdc,hBr);switch(myShape.shape){caseSHAPELINE:MoveToEx(hdc,myShape.ShapeLine.ptStart.x,myShape.ShapeLine.ptStart.y,NULL);LineTo(hdc,myShap8、e.ShapeLine.ptEnd.x
3、E,DRAWSHAPE&>graphicArray;这一句,修改后的代码为typedefstructtagDrawStru{enumDrawToolshape;BOOLbMouseDown;BOOLbFill;intxBegin,yBegin,x,y;COLORREFcolor;HPENhPen;HBRUSHhBr;intlineWidth;CArraygraphicArray;}DRAWSTRU,*PDRAWSTRU;5、修改voidLineMouseUp函数在函数的最后增加以下代码DRAWSHAPEmyShape
4、;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、修改voidEllipseMouseUp函数在函
5、数的最后增加以下代码DRAWSHAPEmyShape;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(
6、myShape);7、修改voidRectMouseUp函数参考6的代码8、修改WM_PAINT处理代码在窗口函数的开始部分增加以下定义:HPENhPen,hOldPen;HBRUSHhBr,hOldBr;在//Todo后面增加以下代码inti;DRAWSHAPEmyShape;for(i=0;i7、Br=CreateSolidBrush(myShape.color);}else{hBr=(HBRUSH)GetStockObject(NULL_BRUSH);}hOldPen=(HPEN)SelectObject(hdc,hPen);hOldBr=(HBRUSH)SelectObject(hdc,hBr);switch(myShape.shape){caseSHAPELINE:MoveToEx(hdc,myShape.ShapeLine.ptStart.x,myShape.ShapeLine.ptStart.y,NULL);LineTo(hdc,myShap8、e.ShapeLine.ptEnd.x
7、Br=CreateSolidBrush(myShape.color);}else{hBr=(HBRUSH)GetStockObject(NULL_BRUSH);}hOldPen=(HPEN)SelectObject(hdc,hPen);hOldBr=(HBRUSH)SelectObject(hdc,hBr);switch(myShape.shape){caseSHAPELINE:MoveToEx(hdc,myShape.ShapeLine.ptStart.x,myShape.ShapeLine.ptStart.y,NULL);LineTo(hdc,myShap
8、e.ShapeLine.ptEnd.x
此文档下载收益归作者所有