文档详情

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

发布:2017-08-05约3.16万字共32页下载文档
文本预览下载声明
面向对象编程技术 实验五实验报告 班 级: 学 号: 姓 名: 时 间: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 实验要求 A、基本功能要求 交互式绘制图形(至少包括线、矩形和文本),绘制完成的图形能够正确地重现 绘制结果可以正确持久化(存储到文件、从文件中读出)// 最终交付的工程中至少包含两个源文件(.cpp文件,即除主程序外,将部分函数分离到单独的源文件)、一个rc文件 B、高级要求 线、矩形、文本的颜色(线色和填充色)、文本字体可调。 能够通过鼠标点击选中图形,并进行属性的修改,修改的内容可包括: 位置 大小 颜色 线型 字体(对应文本图元而言) 能够删除选中的图形 实验过程及结果 交互式绘制图形 此次绘制图形的程序和例程中EasyDraw不同,相比后者,本程序的绘制是建立在结构体数组的基础上的。绘制结果完全可以满足实验要求。 效果图如下: 绘制直线 首先定义一个直线的结构体数组 struct MySaveLine // 直线保存 { POINT ptS; POINT ptE; COLORREF color; int penWidth; int penStyle; }; 绘制直线的函数如下: void DrawMyLine(HDC hdc) // 绘制直线 { HPEN hPen; HPEN hPenOld; int j; for(j=0;jMAX;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); } } 绘制矩形 首先定义一个矩形的结构体数组 struct MySaveRectangle // 矩形保存 { POINT ptS; POINT ptE; COLORREF color; HBRUSH hNewBrush; int brushColor; int penWidth; int penStyle; }; 绘制矩形的函数如下: void DrawMyRectangle(HDC hdc) // 绘制矩形 { int j; HBRUSH hOldBrush; HPEN hPen; HPEN hPenOld; for(j=0;jMAX;j++) { hPen = CreatePen(SaveRectangle[j].penStyle, SaveRectangle[j].penWidth, SaveRectangle[j].color); hPenOld = (HPEN)SelectObject(hdc, hPen); switch (pDrawData-iSelectionBrush) { case IDM_BRUSH_WHITE: case IDM_BRUSH_LTGRAY: hOldBrush = (HBRUSH)SelectObject (hdc, GetStockObject(SaveRectangle[j].brushColor)); break; case IDM_BRUSH_COLORSOLID: case IDM_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);
显示全部
相似文档