C++面向对象简易图形编辑器(2)

2018-12-23 23:24

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

HPEN hPenOld; for(j=0;j

hPenOld = (HPEN)SelectObject(hdc, hPen); switch (pDrawData->iSelectionBrush) { case IDM_BRUSH_WHITE: case IDM_BRUSH_LTGRAY: hOldBrush = (HBRUSH)SelectObject (hdc, GetStockObject(SaveEllipse[j].brushColor));

break; case IDM_BRUSH_COLORSOLID: case IDM_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 输入文本

输入文本前可以选择文本的字体、颜色,然后点击鼠标左键在该处输入文本。 先定义一个文本的结构体数组 struct MySaveText // 文本保存 { POINT pt; char g_EditInput[1024]; COLORREF crText; HFONT hFont; };

选择字体的函数如下:

void ChooseFont(HWND hwnd) { static LOGFONT logfont; static CHOOSEFONT cf; static HFONT hFont; GetObject (GetStockObject (SYSTEM_FONT), sizeof (LOGFONT),

4

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

(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); } }

选择颜色的函数如下:

void ChooseColor(HWND hwnd) { static CHOOSECOLOR cc; static COLORREF crCustomColors[16]; static COLORREF 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;

5

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

if (ChooseColor (&cc)) { SaveText[q].crText = crCustomColors[0]; InvalidateRect (hwnd, NULL, TRUE); } }

输出函数的文本如下:

void DrawMyText(HDC hdc) { int j; for(j=0;j

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

2.6 文本保存

代码如下

void SaveMyData(struct MySaveLine* SaveLine,int LineCount,struct MySaveRectangle* SaveRectangle,int RectangleCount,struct MySaveEllipse* SaveEllipse,int EllipseCount,struct MySaveText* SaveText,int TextCount)

{ static HANDLE hFile; hFile = CreateFile (\

NULL, CREATE_ALWAYS, 0, NULL); if(hFile!=INVALID_HANDLE_VALUE) { DWORD dwByte1=0; DWORD dwByte2=0; DWORD dwByte3=0; DWORD dwByte4=0; WriteFile (hFile, &LineCount, sizeof(int),

6

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

}

}

&dwByte1, NULL); WriteFile (hFile, &RectangleCount, sizeof(int), &dwByte2, NULL); WriteFile (hFile, &EllipseCount, sizeof(int), &dwByte3, NULL); WriteFile (hFile, &TextCount, sizeof(int), &dwByte4, NULL);

WriteFile (hFile, SaveLine, LineCount*sizeof(MySaveLine), &dwByte1, NULL);

WriteFile (hFile, SaveRectangle, RectangleCount*sizeof(MySaveRectangle), &dwByte2, NULL);

WriteFile (hFile, SaveEllipse, EllipseCount*sizeof(MySaveEllipse), &dwByte3, NULL);

WriteFile (hFile, SaveText, TextCount*sizeof(MySaveText), &dwByte4, NULL); CloseHandle(hFile);

2.7 文本读取

代码如下:

void LoadMyData(struct MySaveLine* SaveLine,int LineCount,struct MySaveRectangle* SaveRectangle,int RectangleCount,struct MySaveEllipse* SaveEllipse,int EllipseCount,struct MySaveText* SaveText,int TextCount)

{ static HANDLE hFile; hFile = CreateFile (\ NULL,OPEN_EXISTING, 0, NULL); if(hFile!=INVALID_HANDLE_VALUE) { DWORD dwByte1=0; DWORD dwByte2=0; DWORD dwByte3=0; DWORD dwByte4=0; ReadFile (hFile, &LineCount, sizeof(int), &dwByte1, NULL); ReadFile (hFile, &RectangleCount, sizeof(int), &dwByte2, NULL); ReadFile (hFile, &EllipseCount, sizeof(int), &dwByte3, NULL); ReadFile (hFile, &TextCount, sizeof(int), &dwByte4, NULL);

7

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

}

}

ReadFile (hFile, SaveLine, LineCount*sizeof( MySaveLine), &dwByte1, NULL);

ReadFile (hFile, SaveRectangle, RectangleCount*sizeof( MySaveRectangle), &dwByte2, NULL);

ReadFile (hFile, SaveEllipse, EllipseCount*sizeof(MySaveEllipse), &dwByte3, NULL);

ReadFile (hFile, SaveText, TextCount*sizeof(MySaveText), &dwByte4, NULL); CloseHandle(hFile);

3 实验总结

本实验最大的特点是使用结构体数组,这也是我第一次使用结构体数组,从不使用结构体到使用结构体指针最后升级到结构体数组是一个循序渐进的过程,在这个过程中我越来越感觉到结构体在管理数据方面的优势。我的感觉是在主CPP文件中代码应该是越少越好,很多地方只要调用函数就可以了,然后在另外的CPP中写函数。这样的程序给人的感觉是分层做的比较好,调理比较清晰。

附录 关键代码 一、主CPP

/******************************************************************* 程序:Paint 文件:Paint.cpp

功能:简易的图像编辑器

********************************************************************/ #include \#define MAX 100

TCHAR szAppName[];

struct MySaveLine SaveLine[MAX];

struct MySaveRectangle SaveRectangle[MAX]; struct MySaveEllipse SaveEllipse[MAX]; struct MySaveText SaveText[MAX]; int lineCount;

int rectangleCount; int ellipseCount; int textCount; DRAWDATA* pDrawData ; HACCEL hAccel;

8


C++面向对象简易图形编辑器(2).doc 将本文的Word文档下载到电脑 下载失败或者文档不完整,请联系客服人员解决!

下一篇:计算机基础

相关阅读
本类排行
× 注册会员免费下载(下载后可以自由复制和排版)

马上注册会员

注:下载文档有可能“只有目录或者内容不全”等情况,请下载之前注意辨别,如果您已付费且无法下载或内容有问题,请联系我们协助你处理。
微信: QQ: