矢量图形编辑器课程设计报告
1. 功能描述
最终实现的MFC执行程序如图1所示,主要由菜单,工具栏,状态栏组成,状态栏实时显示鼠标坐标和时间,主要实现的功能描述如下:
· 画基本图行,线、矩形,写文字,其中,文字通过对话框输入。
· 可以设定画笔画刷的样式和颜色,设定文字的字体与颜色。
· 实现对矢量图像的保存和读取。
· 基本的矢量图像的选中,移动,复制,删除。
· 基本的对象的组合和解组合
功能实现比较简单,但是,从用户角度出发简单实用。
<?xml:namespace prefix = v /><?xml:namespace prefix = o />
图1 总体页面
2. 数据结构
该程序中主要的数据类结构图显示如图2,父类 为MGraphic,下含子类MLine、MRectangle、RText,组合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条评论)
登录后参与讨论