C++面向对象简易图形编辑器.docx

上传人:b****9 文档编号:156705 上传时间:2022-10-04 格式:DOCX 页数:32 大小:76.18KB
下载 相关 举报
C++面向对象简易图形编辑器.docx_第1页
第1页 / 共32页
C++面向对象简易图形编辑器.docx_第2页
第2页 / 共32页
C++面向对象简易图形编辑器.docx_第3页
第3页 / 共32页
C++面向对象简易图形编辑器.docx_第4页
第4页 / 共32页
C++面向对象简易图形编辑器.docx_第5页
第5页 / 共32页
点击查看更多>>
下载资源
资源描述

C++面向对象简易图形编辑器.docx

《C++面向对象简易图形编辑器.docx》由会员分享,可在线阅读,更多相关《C++面向对象简易图形编辑器.docx(32页珍藏版)》请在冰豆网上搜索。

C++面向对象简易图形编辑器.docx

山东大学(威海)机电与信息工程学院

2011级

面向对象编程技术实验五实验报告

班 级:

学 号:

姓 名:

时 间:

2013-12-01

目 录

1实验要求 1

A、基本功能要求 1

B、高级要求 1

2实验过程及结果 1

2.1交互式绘制图形 1

2.2绘制直线 1

2.3绘制矩形 2

2.4绘制椭圆 3

2.5输入文本 4

2.6文本保存 6

2.7文本读取 7

3实验总结 8

附录关键代码 8

一、主CPP 8

二、附CPP 22

三、头文件 28

面向对象编程技术实验报告

1实验要求

A、基本功能要求

1.交互式绘制图形(至少包括线、矩形和文本),绘制完成的图形能够正确地重现

2.绘制结果可以正确持久化(存储到文件、从文件中读出)//

3.最终交付的工程中至少包含两个源文件(.cpp文件,即除主程序外,将部分函数分离到单独的源文件)、一个rc文件

用“椭圆”绘制

B、高级要求

1.线、矩形、文本的颜色(线色和填充色)、文本字体可调。

2.能够通过鼠标点击选中图形,并进行属性的修改,修改的内容可包括:

l位置

l大小

l颜色

l线型

l字体(对应文本图元而言)

3.能够删除选中的图形

2实验过程及结果

2.1交互式绘制图形

此次绘制图形的程序和例程中EasyDraw不同,相比后者,本程序的绘制是建立在结构体数组的基础上的。

绘制结果完全可以满足实验要求。

效果图如下:

2.2绘制直线

首先定义一个直线的结构体数组

0

面向对象编程技术实验报告

structMySaveLine //直线保存

{

POINTptS;

POINTptE;

COLORREFcolor;intpenWidth;

intpenStyle;

};

绘制直线的函数如下:

voidDrawMyLine(HDChdc) //绘制直线

{

HPENhPen;HPENhPenOld;intj;

for(j=0;j

{

hPen=CreatePen(SaveLine[j].penStyle,SaveLine[j].penWidth,SaveLine[j].color);hPenOld=(HPEN)SelectObject(hdc,hPen);

MoveToEx(hdc,SaveLine[j].ptS.x,SaveLine[j].ptS.y,NULL);LineTo(hdc,SaveLine[j].ptE.x,SaveLine[j].ptE.y);SelectObject(hdc,hPenOld);

DeleteObject(hPen);

}

}

2.3绘制矩形

首先定义一个矩形的结构体数组

structMySaveRectangle //矩形保存

{

POINTptS;

POINTptE;

COLORREFcolor;HBRUSHhNewBrush;intbrushColor;

intpenWidth;intpenStyle;

};

绘制矩形的函数如下:

voidDrawMyRectangle(HDChdc) //绘制矩形

{

intj;

HBRUSHhOldBrush;HPENhPen;

2

HPENhPenOld;for(j=0;j

{

hPen = CreatePen(SaveRectangle[j].penStyle, SaveRectangle[j].penWidth,SaveRectangle[j].color);

hPenOld=(HPEN)SelectObject(hdc,hPen);switch(pDrawData->iSelectionBrush)

{

caseIDM_BRUSH_WHITE:

caseIDM_BRUSH_LTGRAY:

hOldBrush = (HBRUSH)SelectObject (hdc,GetStockObject(SaveRectangle[j].brushColor));

break;

caseIDM_BRUSH_COLORSOLID:

caseIDM_BRUSH_CROSS:

hOldBrush=(HBRUSH)SelectObject(hdc,SaveRectangle[j].hNewBrush);break;

}

Rectangle(hdc,SaveRectangle[j].ptS.x,SaveRectangle[j].ptS.y,SaveRectangle[j].ptE.x,SaveRectangle[j].ptE.y);

SelectObject(hdc,hPenOld);DeleteObject(hPen);SelectObject(hdc,hOldBrush);

}

}

2.4绘制椭圆

首先定义一个椭圆的结构体数组

structMySaveEllipse //椭圆保存

{

POINTptS;

POINTptE;

COLORREFcolor;HBRUSHhNewBrush;intbrushColor;

intpenWidth;intpenStyle;

};

绘制椭圆的函数如下:

voidDrawMyEllipse(HDChdc) //绘制椭圆

HPENhPenOld;for(j=0;j

{

hPen = CreatePen(SaveEllipse[j].penStyle, SaveEllipse[j].penWidth,SaveEllipse[j].color);

hPenOld=(HPEN)SelectObject(hdc,hPen);switch(pDrawData->iSelectionBrush)

{

caseIDM_BRUSH_WHITE:

caseIDM_BRUSH_LTGRAY:

hOldBrush = (HBRUSH)SelectObject (hdc,GetStockObject(SaveEllipse[j].brushColor));

break;

caseIDM_BRUSH_COLORSOLID:

caseIDM_BRUSH_CROSS:

hOldBrush=(HBRUSH)SelectObject(hdc,SaveEllipse[j].hNewBrush);break;

}

Ellipse(hdc,SaveEllipse[j].ptS.x,SaveEllipse[j].ptS.y,

SaveEllipse[j].ptE.x,SaveEllipse[j].ptE.y);SelectObject(hdc,hPenOld);

DeleteObject(hPen);SelectObject(hdc,hOldBrush);

}

}

2.5输入文本

输入文本前可以选择文本的字体、颜色,然后点击鼠标左键在该处输入文本。

先定义一个文本的结构体数组

structMySaveText //文本保存

{

POINTpt;

charg_EditInput[1024];COLORREF crText;HFONThFont;

};

选择字体的函数如下:

voidChooseFont(HWNDhwnd)

{

staticLOGFONT logfont;staticCHOOSEFONT cf;staticHFONT hFont;

GetObject(GetStockObject(SYSTEM_FONT),sizeof(LOGFONT),

29

(PTSTR)&logfont); //初始化结构logfont

cf.lStructSize =sizeof(CHOOSEFONT);cf.hwndOwner =hwnd;

cf.hDC =NULL;

cf.lpLogFont =&logfont;

cf.iPointSize =0;

cf.Flags =CF_INITTOLOGFONTSTRUCT|CF_SCREENFONTS|CF_EFFECTS;

cf.rgbColors =0;

cf.lCustData =0;

cf.lpfnHook =NULL;cf.lpTemplateName=NULL;cf.hInstance =NULL;

cf.lpszStyle =NULL;

cf.nFontType =0;

cf.nSizeMin =0;

cf.nSizeMax =0;if(ChooseFont(&cf))

{

if(SaveText[q].hFont) DeleteObject(SaveText[q].hFont);SaveText[q].hFont=CreateFontIndirect(&logfont);

InvalidateRect(hwnd,NULL,TRUE);

}

}

选择颜色的函数如下:

voidChooseColor(HWNDhwnd)

{

staticCHOOSECOLOR cc;

staticCOLORREF crCustomColors[16];staticCOLORREF crText=RGB(0,0,0);

//初始化结构cc

cc.lStructSize =sizeof(CHOOSECOLOR);cc.hwndOwner =hwnd;

cc.hInstance =NULL;

cc.rgbResult =RGB(0,0,0);cc.lpCustColors =crCustomColors;

cc.Flags =CC_RGBINIT|CC_FULLOPEN;

cc.lCustData =0;

cc.lpfnHook =NULL;cc.lpTemplateName=NULL;

if(ChooseColor(&cc))

{

SaveText[q].crText=crCustomColors[0];InvalidateRect(hwnd,NULL,TRUE);

}

}

输出函数的文本如下:

voidDrawMyText(HDChdc)

{

intj;

for(j=0;j

{

if(SaveText[j].hFont)SelectObject(hdc,SaveText[j].hFont);//选用逻辑字体SetTextColor(hdc,SaveText[j].crText);

TextOut (hdc, SaveText[j].pt.x,SaveText[j].pt.y,SaveText[j].g_EditInput

strlen(SaveText[j].g_EditInput));

SelectObject(hdc,GetStockObject(SYSTEM_FONT)); //还原逻辑字体

}

}.

2.6文本保存

代码如下

void

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > PPT模板 > 其它模板

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1