ImageVerifierCode 换一换
格式:DOCX , 页数:39 ,大小:69.75KB ,
资源ID:18678169      下载积分:3 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/18678169.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(C++面向对象简易图形编辑器Word文件下载.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

C++面向对象简易图形编辑器Word文件下载.docx

1、效果图如下:2.2 绘制直线首先定义一个直线的结构体数组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;jiSelectionBrush) case IDM_BRUSH_WHITE: case IDM_BRUSH_LTGRAY: hOldBrush = (HBRUSH)SelectObject (hdc

2、, GetStockObject(SaveRectanglej.brushColor); break; case IDM_BRUSH_COLORSOLID: case IDM_BRUSH_CROSS: hOldBrush = (HBRUSH)SelectObject (hdc, SaveRectanglej.hNewBrush); Rectangle (hdc, SaveRectanglej.ptS.x,SaveRectanglej.ptS.y, SaveRectanglej.ptE.x, SaveRectanglej.ptE.y); SelectObject(hdc, hOldBrush);

3、 2.4 绘制椭圆首先定义一个椭圆的结构体数组struct MySaveEllipse / 椭圆保存绘制椭圆的函数如下:void DrawMyEllipse(HDC hdc) / 绘制椭圆 hPen = CreatePen(SaveEllipsej.penStyle, SaveEllipsej.penWidth, SaveEllipsej.color); hOldBrush = (HBRUSH)SelectObject (hdc, GetStockObject(SaveEllipsej.brushColor); hOldBrush = (HBRUSH)SelectObject (hdc, Sa

4、veEllipsej.hNewBrush); Ellipse (hdc, SaveEllipsej.ptS.x,SaveEllipsej.ptS.y, SaveEllipsej.ptE.x, SaveEllipsej.ptE.y);2.5 输入文本输入文本前可以选择文本的字体、颜色,然后点击鼠标左键在该处输入文本。先定义一个文本的结构体数组struct MySaveText / 文本保存 POINT pt; char g_EditInput1024; COLORREF crText; HFONT hFont;选择字体的函数如下:void ChooseFont(HWND hwnd) static

5、 LOGFONT logfont; static CHOOSEFONT cf; static HFONT hFont; GetObject (GetStockObject (SYSTEM_FONT), sizeof (LOGFONT), (PTSTR) &logfont); /初始化结构 logfont cf.lStructSize = sizeof (CHOOSEFONT); cf.hwndOwner = hwnd; cf.hDC = NULL; cf.lpLogFont = &logfont; cf.iPointSize = 0; cf.Flags = CF_INITTOLOGFONTST

6、RUCT | 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 (SaveTextq.hFont) DeleteObject (SaveTextq.hFont); SaveTextq.hFon

7、t = CreateFontIndirect (& InvalidateRect (hwnd, NULL, TRUE);选择颜色的函数如下:void ChooseColor(HWND hwnd) static CHOOSECOLOR cc; static COLORREF crCustomColors16; static COLORREF crText = RGB (0, 0, 0); /初始化结构 cc cc.lStructSize = sizeof (CHOOSECOLOR); cc.hwndOwner = hwnd; cc.hInstance = NULL; cc.rgbResult =

8、 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) SaveTextq.crText = crCustomColors0;输出函数的文本如下:void DrawMyText(HDC hdc) for(j=0; if (SaveTextj.hFont) SelectObject (hdc, SaveText

9、j.hFont); /选用逻辑字体 SetTextColor (hdc, SaveTextj.crText); TextOut (hdc, SaveTextj.pt.x,SaveTextj.pt.y,SaveTextj.g_EditInput ,strlen(SaveTextj.g_EditInput); SelectObject (hdc, GetStockObject (SYSTEM_FONT); /还原逻辑字体 .2.6 文本保存代码如下void SaveMyData(struct MySaveLine* SaveLine,int LineCount,struct MySaveRecta

10、ngle* SaveRectangle,int RectangleCount,struct MySaveEllipse* SaveEllipse,int EllipseCount,struct MySaveText* SaveText,int TextCount) static HANDLE hFile; hFile = CreateFile (e:abc.f, GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, 0, NULL); if(hFile!=INVALID_HANDLE_VALUE) DWORD dwByte1=0; DWORD dwByte2=0; DW

11、ORD dwByte3=0; DWORD dwByte4=0; WriteFile (hFile, &LineCount, sizeof(int), &dwByte1, NULL);RectangleCount, sizeof(int), dwByte2, NULL);EllipseCount, sizeof(int), dwByte3, NULL);TextCount, sizeof(int), dwByte4, NULL); WriteFile (hFile, SaveLine, LineCount*sizeof(MySaveLine), WriteFile (hFile, SaveRec

12、tangle, RectangleCount*sizeof(MySaveRectangle), WriteFile (hFile, SaveEllipse, EllipseCount*sizeof(MySaveEllipse), WriteFile (hFile, SaveText, TextCount*sizeof(MySaveText), CloseHandle(hFile);2.7 文本读取代码如下:void LoadMyData(struct MySaveLine* SaveLine,int LineCount,struct MySaveRectangle* SaveRectangle

13、,int RectangleCount,struct MySaveEllipse* SaveEllipse,int EllipseCount,struct MySaveText* SaveText,int TextCount), GENERIC_READ,FILE_SHARE_READ, NULL,OPEN_EXISTING, 0, NULL); ReadFile (hFile, & ReadFile (hFile, SaveLine, LineCount*sizeof( MySaveLine), ReadFile (hFile, SaveRectangle, RectangleCount*s

14、izeof( MySaveRectangle), ReadFile (hFile, SaveEllipse, EllipseCount*sizeof(MySaveEllipse), ReadFile (hFile, SaveText, TextCount*sizeof(MySaveText), 3 实验总结本实验最大的特点是使用结构体数组,这也是我第一次使用结构体数组,从不使用结构体到使用结构体指针最后升级到结构体数组是一个循序渐进的过程,在这个过程中我越来越感觉到结构体在管理数据方面的优势。我的感觉是在主CPP文件中代码应该是越少越好,很多地方只要调用函数就可以了,然后在另外的CPP中写函数

15、。这样的程序给人的感觉是分层做的比较好,调理比较清晰。附录 关键代码一、主CPP/*程序:Paint文件:Paint.cpp功能:简易的图像编辑器*/#include draw.h#define MAX 100TCHAR szAppName;struct MySaveLine SaveLineMAX;struct MySaveRectangle SaveRectangleMAX;struct MySaveEllipse SaveEllipseMAX;struct MySaveText SaveTextMAX;int lineCount;int rectangleCount;int ellips

16、eCount;int textCount;DRAWDATA* pDrawData ;HACCEL hAccel;HDC hdc;int i,m,n,p,q;BOOL InitWindow (HINSTANCE hInstance, int nCmdShow);LRESULT CALLBACK WinProc (HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam);函数:WinMain ()Win32 应用程序入口函数。创建主窗口,处理消息循环int WINAPI WinMain (HINSTANCE hInstance, /当前实例句柄

17、HINSTANCE hPrevInstance, /前一个实例句柄 PSTR szCmdLine, /命令行字符 int iCmdShow) /窗口显示方式 MSG msg; char *p; /创建主窗口 if (!InitWindow (hInstance, iCmdShow) return FALSE; p=0; /进入消息循环:从该应用程序的消息队列中检取消息, /送到消息处理过程,当检取到WM_QUIT消息时,退出消息循环。 while (GetMessage (&msg, NULL, 0, 0) TranslateMessage (&msg); DispatchMessage (&

18、 return msg.wParam;/*InitWindow ()创建窗口。*/static BOOL InitWindow (HINSTANCE hInstance, int iCmdShow) HWND hwnd; /窗口句柄 WNDCLASS wcMainWnd; /窗口类结构 ATOM a; /填充窗口类结构 wcMainWnd.style = CS_VREDRAW | CS_HREDRAW; wcMainWnd.lpfnWndProc = WinProc; wcMainWnd.cbClsExtra = 0; wcMainWnd.cbWndExtra = 0; wcMainWnd.h

19、Instance = hInstance; wcMainWnd.hIcon = LoadIcon (hInstance, MAKEINTRESOURCE(IDI_ICON1); wcMainWnd.hCursor = LoadCursor (NULL, IDC_ARROW); wcMainWnd.hbrBackground = (struct HBRUSH_ *)GetStockObject (WHITE_BRUSH); wcMainWnd.lpszMenuName = (LPSTR)IDR_MENU1; wcMainWnd.lpszClassName = szAppName; LoadAcc

20、elerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1); hAccel= LoadAccelerators(hInstance,MAKEINTRESOURCE(IDR_ACCELERATOR1); /注册窗口类 a = RegisterClass (&wcMainWnd);a) MessageBox (NULL, TEXT (注册窗口类失败!), szAppName, MB_ICONERROR); return 0; hwnd = CreateWindow (szAppName, /窗口类名称 TEXT (简易的图形编辑器 作者:娄通), /窗口标题 WS_OVERLAPPEDWINDOW, /窗口风格 200, /窗口位置的x坐标 200, /窗口位置的y坐标

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

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