C++画图编辑器_第1页
C++画图编辑器_第2页
C++画图编辑器_第3页
C++画图编辑器_第4页
C++画图编辑器_第5页
已阅读5页,还剩13页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、辽 宁 工 业 大 学C+语言程序设计课程设计(论文)题目: 画图板编辑器 院(系): 软 件 学 院 专业班级: 软 学 号: 学生姓名: 指导教师: 教师职称: 起止时间:20课程设计(论文)任务及评语院(系):软件学院 教研室:软件教研室学 号学生姓名李专业班级软课程设计(论文)题目画图板编辑器课程设计(论文)任务程序设计的任务与要求:(1). 掌握面向对象程序设计语言C+的基本语法(2). 掌握C+面向对象设计的思想(3). 掌握VC+6.0与DEV C+ 开发工具的使用 (4). 运用标准C+规范设计应用程序设计过程中,要严格遵守设计的时间安排,听从指导教师的指导。正确地完成上述内容

2、,规范完整地撰写出设计报告。指导教师评语及成绩 成绩: 指导教师签字: 年 月 日辽 宁 工 业 大 学 课 程 设 计 说 明 书(论 文) 目 录第1章 课程设计目的与要求11.1 设计目的11.2实验环境11.3预备知识11.4设计要求1第2章 课程设计内容22.1 课题描述22.2 系统设计22.2.1功能分析22.2.2面向对象设计22.2.2类成员描述52.3程序实现72.3.1源码分析72.3.2运行结果12第3章 课程设计总结14参考文献15第1章 课程设计目的与要求1.1 设计目的将理论教学中涉及到的知识点贯穿起来,对不同的数据类型、程序控制结构、数据结构作一比较和总结,结合

3、设计题目进行综合性应用,对所学知识达到融会贯通的程度。通过课程设计,学生在下述各方面的能力应该得到锻炼:(1)进一步巩固、加深学生所学专业课程C+语言教程的基本理论知识,理论联系实际,进一步培养学生综合分析问题,解决问题的能力。(2)全面考核学生所掌握的基本理论知识及其实际业务能力,从而达到提高学生素质的最终目的。(3)利用所学知识,开发小型应用系统,掌握运用C+语言编写调试应用系统程序,训练独立开发应用系统,进行数据处理的综合能力。(4)对于给定的设计题目,如何进行分析,理清思路,并给出相应的数学模型。(5)掌握面向对象程序设计的方法。(6)熟练掌握C+语言的基本语法,灵活运用各种数据类型。

4、(7)进一步掌握在集成环境下如何调试程序和修改程序。1.2实验环境硬件要求能运行Windows 操作系统的微机系统。C+语言应用程序开发软件使用:VC+ 系统,或其他C+语言应用程序开发软件。1.3预备知识熟悉C+语言程序设计的基本知识及VC+编辑器的使用方法。1.4设计要求1.仔细分析设计题目,画出程序流程图,编写程序源代码。2.积极上机调试源程序,增强编程技巧与调程能力。3.认真书写课程设计预习报告,课程设计说明书。4.遵守课程设计要求和机房管理制度,服从指导教师的安排,确保课程设计的顺利完成课程设计内容。第2章 课程设计内容2.1 课题描述本程序使用C+语言编写控制台程序,模仿Windo

5、ws下的画板程序,但是DOS下只支持16色的颜色,所以本程序不是那么完善,只能够完成基本的简单功能。期间还要调用Windows下的API函数,而不是仅仅用C+类库中的函数。2.2 系统设计2.2.1功能分析本程序,主要完成用C+语言在控制台中实现画图。画图版中包含有十四种颜色,十四种图形,而且可以在图形的基础上实现颜色的改变。还可以在DOS环境下实现.screen为后缀的文件的打开查看。由于在控制台环境下,没有任何颜色可言,所以只能通过调用windows下的API颜色函数来实现画图中颜色这一功能。画图者对画板大小的要求不同,所以此程序还应可以完成对画板大小的具体设置。2.2.2面向对象设计类的

6、uml类图:ConsoleWindow+ConsoleWindow()+typedef HWND (WINAPI *PROCGETCONSOLEWINDOW)+ HWND GetWindowsHandle()StdFun# ConvertRect(int x,int y,int width,int height)#SMALL_RECT EvalueRect(int x,int y,int width,int height)基类StdFun+WINDOWS API函数库- WINDOWS API函数库 派生类MouseInfoMouseInfo+intx,y;+int press,doubl;+

7、MouseInfo()+ bool MouseInRect(SMALL_RECT *myrect)+ DWORD GetMouseInfo()-HANDLE _hIn;-INPUT_RECORD_InRec;-DWORD_NumRead;-MOUSE_EVENT_RECORD mrc; StdFun+库函数Brush+Brush ()+void SetInfo()+void OnPaint()+void DrawBrush()+bool BrushInBuffer()+ void SetSize(int setwidth,int setheight) 类的派生关系UML图2.2.2类成员描述c

8、lass Brush:public StdFun /*定义刷子*/long color;char *style;long width;long height;CHAR_INFO*bufferInfo;COORD crood ;COORD point;COORD size ;HANDLE handleOut;SMALL_RECT myrect;class SaveButton:public Button /*定义存储*/public:SaveButton()void SetInfo(int x,int y,int size)this-x = x;this-y = y;this-size = si

9、ze;rect = EvalueRect(x,y,size,size);Print();void Print()SMALL_RECT rect = EvalueRect(x,y,size,size);myScreen.OutPutRect(&rect,9);rect = EvalueRect(x+1,y+1,size-2,size-5);myScreen.OutPutRect(&rect,7);rect = EvalueRect(x+2,y+size-2,size-4,size-8);myScreen.OutPutRect(&rect,7);void OnPress()SMALL_RECT r

10、ect = EvalueRect(x+1,y+1,size-2,size-5);myScreen.OutPutRect(&rect,8);void OnRelase()SMALL_RECT rect = EvalueRect(x+1,y+1,size-2,size-5);myScreen.OutPutRect(&rect,7);char path256 = 未命名.Screen;if(SaveFile(path)myBuffer.WriteFile(path);void OnRollOver()SMALL_RECT rect = EvalueRect(x+1,y+1,size-2,size-5

11、);myScreen.OutPutRect(&rect,12);void OnRollOut()SMALL_RECT rect = EvalueRect(x+1,y+1,size-2,size-5);myScreen.OutPutRect(&rect,7);bool SaveFile(char *shortPath)OPENFILENAME ofn;ZeroMemory(&ofn,sizeof(ofn);ofn.lStructSize = sizeof(ofn);ofn.lpstrFile = shortPath;ofn.nMaxFile = sizeof(char)*256;ofn.lpst

12、rFilter = TEXT(*.Screen0ALL0);ofn.nFilterIndex = 1;ofn.hwndOwner = myWindows.GetWindowsHandle();ofn.Flags =OFN_EXPLORER |OFN_PATHMUSTEXIST | OFN_ALLOWMULTISELECT ;return GetSaveFileName(&ofn)?true:false;private:int x,y;int size;mySaveButton;2.3程序实现2.3.1源码分析#include /*stdlib 头文件即standard library标准库头文

13、件*/#include /* stdio.h头文件即标准输入输出头文件*/#include /* windows.h头文件即定义了Windows的所有资料型态、函数调用、资料结构和常数识别字*/class StdFunprotected:SMALL_RECT ConvertRect(int x,int y,int width,int height)SMALL_RECT setrect = (x-1)*2,y-1,(x-1)*2+width*2-1,y-1+height-1;return setrect;SMALL_RECT EvalueRect(int x,int y,int width,in

14、t height)SMALL_RECT setrect = x,y,x+width-1,y + height-1;return setrect;class ConsoleWindowtypedef HWND (WINAPI *PROCGETCONSOLEWINDOW)();PROCGETCONSOLEWINDOW GetConsoleWindow;public:ConsoleWindow()HMODULE hKernel32 = GetModuleHandle(kernel32);GetConsoleWindow=(PROCGETCONSOLEWINDOW)GetProcAddress(hKe

15、rnel32,GetConsoleWindow);HWND GetWindowsHandle()returnGetConsoleWindow();myWindows;/*调用WINDOWS的API函数实现DOS中没有颜色这一问题*/class MouseInfo:public StdFunpublic:intx,y;int press,doubl;MouseInfo()x = 0;y = 0;press = 0;doubl = 0;hIn = GetStdHandle(STD_INPUT_HANDLE);DWORD GetMouseInfo()ReadConsoleInput(_hIn , &

16、_InRec , 1 , &_NumRead) ;if ( _NumRead = 1 )if ( _InRec.EventType = MOUSE_EVENT ) mrc = _InRec.Event.MouseEvent ; x = (mrc.dwMousePosition.X+2)/2;y = mrc.dwMousePosition.Y+1;press = mrc.dwButtonState;doubl = mrc.dwEventFlags;return mrc.dwEventFlags;return false;bool MouseInRect(SMALL_RECT *myrect)if

17、(x Left ) return false;if(x myrect-Right ) return false;if(y Top ) return false;if(y myrect-Bottom) return false;return true;private:HANDLE _hIn;INPUT_RECORD _InRec;DWORD _NumRead;MOUSE_EVENT_RECORD mrc;mouse;class Screen:public StdFunpublic:Screen()font = 1;bufferInfo = 0;handleOut = GetStdHandle(S

18、TD_OUTPUT_HANDLE); /获取标准输出设备句柄HMODULE hKernel32 = GetModuleHandle(kernel32);SetConsoleFont=(PROCSETCONSOLEFONT)GetProcAddress(hKernel32,SetConsoleFont);SetCursorShow(FALSE);Virtual void OutPutPoint(int x,int y,char *pad,int color)MoveTo(x,y);FillConsoleOutputAttribute(handleOut, color, 2, point, NUL

19、L);WriteConsoleOutputCharacter(handleOut, pad, 2, point, NULL);Virtual void OutPutString(int x ,int y,char *string,int attr )MoveTo(x,y);DWORD stringLength = (DWORD)strlen(string);FillConsoleOutputAttribute(handleOut, attr, stringLength, point, NULL);WriteConsoleOutputCharacter(handleOut, string, st

20、ringLength, point, NULL);Virtual void OutPutRect(SMALL_RECT* rectp,WORD color,int value = 1,char *pad = )for(int i = rectp-Top ; i Bottom ;i+)for(int j = rectp-Left ; j Right ;j+)if(j = rectp-Left) | (j = rectp-Right) | (i = rectp-Top) | (i = rectp-Bottom)OutPutPoint(j,i,pad,color);elseif(value)OutP

21、utPoint(j,i,pad,color);void SetHandleOut(HANDLE handleout)handleOut = handleout;void SetFont(int setfont)font = setfont;SetConsoleFont(handleOut,font);void SetCursorShow(BOOL _value)GetConsoleCursorInfo(handleOut,&cursor_info);cursor_info.bVisible=_value;SetConsoleCursorInfo(handleOut,&cursor_info);

22、void SetWindow(size_t column,size_t lines)/*COORD Size = column * 2, lines ;SMALL_RECT myrect = 0,0,column * 2-1, lines -1;if(!SetConsoleScreenBufferSize(handleOut,Size)MessageBox(myWindows.GetWindowsHandle(),设置屏幕缓冲错误,0);SetConsoleWindowInfo(handleOut,TRUE,&myrect);*/char cmd256;sprintf(cmd,MODE CON

23、: COLS=%d LINES=%d,column*2,lines);system(cmd);HANDLE hIn=GetStdHandle(STD_INPUT_HANDLE);DWORD oldmode;GetConsoleMode(hIn,&oldmode);SetConsoleMode(hIn,oldmode|ENABLE_MOUSE_INPUT);long Height()return size.Y;long Width()return size.X/2;protected:CHAR_INFO* bufferInfo;COORD pointHANDLE handleOut;COORD

24、size ;Long font;CONSOLE_CURSOR_INFO cursor_info;VoidMoveTo(intx,int y)point.X = x*2-2;point.Y = y*1-1;typedef BOOL (WINAPI *PROCSETCONSOLEFONT)(HANDLE, DWORD);PROCSETCONSOLEFONT SetConsoleFont;myScreen;2.3.2运行结果1.画图板编辑器界面:编辑器大小的调节:另存为.screen格式的图片:第3章 课程设计总结从一个学网络的学生发展成为现在对软件方便有一定了解的学生这一转变过程,万分感谢翟老师。他开启啦我的编程大门,让我渐渐融入程序设计中。这次的C+课设这是在这一基础上,使得我本次的课设和之前的有很大的提升。人们都知道DOS中只能是乌龟画图,不知道DOS中也可以展现出彩色画图板的功能。我正是出于这方面的考虑,我开始学习课外的WINDOWS 的API函数。在课外的学习过程中,收益匪浅,通

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论