![《软件建模与实践》课件-11-基于泛化特性的矢量绘图软件_第1页](http://file4.renrendoc.com/view14/M00/2C/22/wKhkGWetRzOAHlq5AAFWYc2h4bY472.jpg)
![《软件建模与实践》课件-11-基于泛化特性的矢量绘图软件_第2页](http://file4.renrendoc.com/view14/M00/2C/22/wKhkGWetRzOAHlq5AAFWYc2h4bY4722.jpg)
![《软件建模与实践》课件-11-基于泛化特性的矢量绘图软件_第3页](http://file4.renrendoc.com/view14/M00/2C/22/wKhkGWetRzOAHlq5AAFWYc2h4bY4723.jpg)
![《软件建模与实践》课件-11-基于泛化特性的矢量绘图软件_第4页](http://file4.renrendoc.com/view14/M00/2C/22/wKhkGWetRzOAHlq5AAFWYc2h4bY4724.jpg)
![《软件建模与实践》课件-11-基于泛化特性的矢量绘图软件_第5页](http://file4.renrendoc.com/view14/M00/2C/22/wKhkGWetRzOAHlq5AAFWYc2h4bY4725.jpg)
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
11.1需求分析矢量图形是由点、线、矩形、多边形、圆和弧线等图形元素构成的利用面向对象的程序设计和类的组织方法,设计实现一个基本矢量图形绘制系统系统能够处理直线、矩形、圆、椭圆、橡皮擦、标注文本等几类基本图形元素采用泛化关系建立起它们之间的继承关系11.2设计过程图形元素类派生结构11.3具体实现1.创建MyDraw项目(1)(2)(3)2.创建Ribbon功能区在Ribbon界面下,CMainFrame类包含了三个成员变量:m_wndRibbonBar、m_MainButton和m_wndStatusBar,分别用于控制Ribbon界面的命令面板、应用程序按钮和状态栏。在创建Ribbon功能区前,首先需要通过第三方图像处理软件(如PhotoShop)创建两个格式为32位的bmp文件。(1)在创建32位位图后,将位图文件复制到项目目录下的res目录中,并将大位图文件和小位图文件分别重命名为large.bmp和small.bmp。然后,在“ResourceView”资源视图中选择“Bitmap”分支,单击右键选择“AddResource”菜单命令,弹出“AddResource”对话框。(2)单击“AddResource”中的“Import”按钮以导入res目录下的large.bmp和small.bmp位图文件。然后在“Properties”属性窗口中分别修改位图资源的ID为IDB_LARGE和IDB_SMALL, Ribbon界面用新的RibbonBar代替了传统的菜单栏。默认情况下,RibbonBar已经拥有了一个名为“Home”的命令分组(Category),其中又包含了多个面板(Panel),每个面板中有一个或者多个命令按钮(RibbonButton)。在“ResourceView”中,展开MyDraw.rc→Ribbon→IDR_RIBBON节点。双击该文件打开RibbonDesigner界面(4)创建“绘图”类别。(5)创建“工具”面板命令项(6)仿照第(5)步的步骤添加“颜色”面板,并为“工具”和“颜色”面板添加表11-1所示的命令项。标题ID隶属面板ImageIndexLargeImageIndex铅笔ID_DRAW_PEN工具00直线ID_DRAW_LINE工具11矩形ID_DRAW_RECT工具22椭圆ID_DRAW_ELLIPSE工具33圆ID_DRAW_CIRCLE工具44分隔符无工具
橡皮擦ID_DRAW_ERASER工具88文本输出ID_DRAW_TEXT工具99画笔颜色ID_DRAW_COLOR颜色1010填充颜色ID_FILL_COLOR颜色1111(7)创建Ribbon功能区后,选择“生成”→“生成解决方案”菜单命令以编译整个项目,然后选择“调试”→“开始执行(不调试)”菜单命令运行程序。3.新建绘图类设计一个绘图基类CDraw,完成不同图形的绘制和颜色填充等功能(1)添加CDraw类(2)在CDraw类的定义中添加如下黑体代码#pragmaonce//CDrawcommandtargetclassCDraw:publicCObject{public:
COLORREFm_ColorPen;
//笔色
COLORREFm_ColorBrush; //填充颜色public:
CDraw();
virtual~CDraw();
CDraw(COLORREFColorPen,COLORREFColorBrush)
{//构造函数
m_ColorPen=ColorPen;
m_ColorBrush=ColorBrush;
} virtualvoidDraw(CDC*pDC)=0;};(3)向工程中添加CDraw类的派生类CLine(直线类)、CRectangle(矩形类)、CCircle(圆类)、CEllipse(椭圆类)、CErase(橡皮擦类)、CText(文本类)。如:添加CLine类Line.h的代码如下:Line.cpp的代码如下:4.响应绘图命令(1)在CMyDrawView类的头文件中添加包含“Draw.h”的头文件代码,然后在该类的定义中添加三个成员变量,以分别保存当前的绘图类型、绘图颜色及填充颜色(2)在“ClassView”类视图中选中CMyDrawView,并在属性窗口中单击“Messages”按钮,为消息WM_CREATE添加消息响应函数,在该函数中初始化新添加的成员变量(3)为工具命令添加消息响应函数。在“ResourceView”中,展开MyDraw.rc->Ribbon->IDR_RIBBON节点。在编辑区右键单击“铅笔”按钮,选择“AddEventHandler”,在弹出的“EventHandlerWizard”对话框中,为ID_DRAW_PEN添加CMyDrawView类的WM_COMMAND消息响应函数4.响应绘图命令4.响应绘图命令分别为工具面板的命令ID_DRAW_PEN、ID_DRAW_LINE等添加WM_COMMAND消息的响应函数,并在这些函数中分别根据绘制的图形类型来设置m_nDrawShape成员变量
当单击Ribbon工具面板上的绘图按钮后,需要设置该按钮为选中状态,可以通过在属性窗口中为这些工具命令响应UPDATE_COMMAND_UI消息来实现。在这些消息响应函数中根据判断是否以当前绘图类型类设置工具按钮为选中状态(4)同样为颜色面板命令ID_DRAW_COLOR和ID_FILL_COLOR在CMyDrawView中添加WM_COMMAND消息的响应函数。在这两个函数中通过创建CMFCColorDialog类的对象来弹出Office中的颜色对话框,并将用户选择的颜色值分别保存到m_crDrawColor和m_crFillColor成员变量中4.响应绘图命令5.实现图形绘制(1)在“ClassView”视图下双击CMyDrawView类,打开MyDrawView.h文件,为CMyDrawView类添加用于保存绘图状态的成员变量(2)在CMyDrawView类的OnCreate函数中设置m_bDrawShape的初值,添加如下黑体代码5.实现图形绘制(3)响应鼠标左键按下事件,并开始绘制图形。在类视图中选择CMyDrawView,然后单击属性窗口的“Messages”按钮,添加WM_LBUTTONDOWN消息的响应函数。在该函数中根据绘图的类型m_nDrawShape来创建CDrawShape对象,并调用该对象的StartDraw成员函数来开始绘制图形5.实现图形绘制5.实现图形绘制(4)同样地,为CMyDrawView类添加鼠标移动WM_MOUSEMOVE消息的响应函数。在该消息的响应函数中根据选择的绘图类型,调用CDC类绘制图形(5)为CMyDrawView类添加WM_LBUTTONUP消息的响应函数。取消光标的限制,并设置m_bDrawShape为FALSE以结束图形的绘制(6)以上程序已经可以实现简单的绘图功能,但是当我们改变窗口大小时,绘制的图形会消失,因此需要对绘制的图形进行保存,使用MFC类模板实现。(7)当移动鼠标时,除了绘制线段,还要保存当前线段的起点和终点坐标。(8)在OnDraw函数中重绘前面用鼠标所绘制的线段。(9)编译链接运行结果如图所示。6.保存绘制的图形根据序列化知识,以直线类为例,使用序列化函数Serialize实现图形的保存。(1)在CLine类的声明头文件中添加函数Serialize的声明和DECLARE_SERIAL宏(2)在CLine的实现文件中成员函数的定义前添加IMPLEMENT_SERIAL宏(3)在文档类中完成所有线段的读写操作。修改文档类的序列化函数(4)为了在执行File|New时能将当前客户窗口中所绘制的图形清除,要重载文档类的虚函数DeleteContents(5)为程序增加提示保存功能。修改文档类的成员函数AddLine(6)编译连接运行7.实现文本输出(1)在CMyDrawView类声明中添加用于保存插入符位置、文本内容、文本颜色等的成员变量(2)在CMyDrawView类的OnCreate函数中创建默认的字体,以及初始化其他成员变量等(3)为CMyDrawView类添加应用程序窗口获得焦点和失去焦点WM_SETFOCUS和WM_KILLFOCUS消息的响应函数。这两个函数分别用来创建插入符和删除插入符(4)在鼠标左键按下时的消息响应函数OnLButtonDown中设置插入符位置,并开始接收文本输入并显示。(5)为CMyDrawView类添加字符消息WM_CHAR的消息响应函数。在该函数中响应字符输入,并保存到m_strTextBuf成员变量中,然后调用设备环境的TextOut显示文本8.修改绘图光标(1)在资源视图中选择项目名节点并右击,在弹出的快捷菜单中选择“添加”→“资源”菜单命令,弹出“添加资源”对话框。在对话框中选择“Cursor”资源类型,然后分别向项目中添加四个光标资源修改绘图光标(2)为CMyDrawView类添加WM_SETCURSOR消息的响应函数,并在该函数中调用LoadCursor和SetCursor来加载、设置光标BOOLCMyDrawView::OnSetCursor(CWnd*pWnd,UINTnHitTest,UINTmessage){if(m_nDrawShape==SHAPE_PEN)SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR1));
//画笔光标elseif(m_nDrawShape==SHAPE_TEXT)SetCursor(AfxGetApp()->LoadCursor(IDC_CURSOR2));
//文本输入光标elseif(m_nDrawSh
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 学生交流会策划方案(8篇)
- 2025年材料用过滤袋合同采购流程
- 2025年医用耗材集中采购协议
- 2025年文物遗址保护服务项目规划申请报告
- 2025年舞蹈学校教职员工劳动合同
- 2025年贵金属靶材项目申请报告模板
- 2025年企业互助共享协议
- 2025年单位二手商业房产出售合同范本
- 2025年公司员工竞业限制协议范例
- 2025年组合开关项目提案报告
- 2024年中考数学专题训练 专题10 截长补短模型综合应用(知识解读)
- 专利分析评议报告
- 员工招聘与人才引进培训课件
- 装配式预制剪力墙外墙板制作教学课件:预制外墙板生产流程
- 英语旅游文本的句式特点及其翻译
- 咖啡种植园项目计划书
- 2024年山东省春季高考模拟考试英语试卷试题(含答案详解二)
- 建设用地报批服务投标方案(技术方案)
- 精装修室内施工组织部署
- 农用拖拉机考试题库
- GJB438C模板-软件开发计划(已按标准公文格式校准)
评论
0/150
提交评论