原创 矢量图形编辑器课程设计报告

2011-6-7 08:56 3369 7 7 分类: 工程师职场

矢量图形编辑器课程设计报告

1.       功能描述

最终实现的MFC执行程序如图1所示,主要由菜单,工具栏,状态栏组成,状态栏实时显示鼠标坐标和时间,主要实现的功能描述如下:

·         画基本图行,线、矩形,写文字,其中,文字通过对话框输入。

·         可以设定画笔画刷的样式和颜色,设定文字的字体与颜色。

·         实现对矢量图像的保存和读取。

·         基本的矢量图像的选中,移动,复制,删除。

·         基本的对象的组合和解组合

功能实现比较简单,但是,从用户角度出发简单实用。

<?xml:namespace prefix = v /><?xml:namespace prefix = o />

1 总体页面

 

 

2.       数据结构

  该程序中主要的数据类结构图显示如图2,父类 MGraphic,下含子类MLineMRectangleRText,组合Compite,修饰Decorator。基于Mgraphic类的管理类CGraphicManager以单体(singleton)模式使用,另外使用了SmartRefe智能指针指向CgraphicManager类,用于删除单体(singleton)造成的内存泄露。

   父类Mgraphic的成员变量主要包括画图程序中保存,重绘需要用到的图像的起点终点,画图类型,画笔类型,画刷类型,画笔颜色,画刷颜色,字体颜色,字符串和字体,各个子类通过构造函数分别继承需要用的成员变量。根据画图类型的不一样,执行子类里面不同的Draw()函数。其中修饰类在图像选中和组合的时候使用,在它的Draw()函数里面使用了MFC自带的CrectTracker类用于标记选中图形,使用比较简单。组合类只是简单实现其功能。

CgraphicManager类主要是实现在View里面LuttonUp时构造画图类型,刷新的时候图形的重绘以及父类Mgraphic内存的释放。该类刚开始未使用单体(singleton)模式,程序运行的时候没有出现内存泄露,使用单体后,有很多运行垃圾,故使用智能指针,释放CgraphicManager类留下的资源。

2 程序类图

                数据存储使用的串行化。

3.       模式实现

该程序中主要使用的设计模式及理解。

·         抽象工厂和工厂方法模式。程序在MFC框架下构建内含两种设计模式抽象工厂和工厂方法,结构清晰明了,便于操作者使用。

·         单体(singleton)模式。做为为"全局变量"的替代品出现的,但是程序中该模式的运用导致内存泄露。

·         智能指针。可以自动释放资源,防止内存泄露。

·         修饰。在基本图像进行操作的时候进行修饰使用,在程序使用中运用比较简单。

·         组合。用于区分单个和整体。

4.       总结

  此次程序设计中,基本实现所要求的功能。但是,还是存在很严重的问题,由于串行化保存和list使用的不够熟悉,所以在文件保存的时候重新新建了一个类,导致数据的重复以及Draw操作的重复,并且在后来实现修饰和组合的时候由于数据,操作的重复导致实现偏离模式本身的框架。另外,缺乏操作菜单中撤销,重做的消息响应。希望在下一版本中可以将数据结构优化,将功能实现完整。                                     

 

文章评论0条评论)

登录后参与讨论
我要评论
0
7
关闭 站长推荐上一条 /2 下一条