刚入职不久,公司原有一个根据模板自动生成Word的程序,也可通过本程序通过编程创建Word,框架已经建好,只是一些功能还没有完善。算是对能力的一个考验吧,我接到了这个任务,经过三个月星期的努力,交差了。
最近两周一直在学习GDI+, 图形程序设计。用的是Mahesh Chand的教材,韩江等译。
昨天总监看我把书看的差不多了,就给了我一个网址
http://www.codeproject.com/KB/cs/DrawToolsRedux.aspx
一个画图工具,外国人搞的,让我看看人家的设计结构。并且告诉我关于存储等方面的功能不用看,只看画图那部分就OK了。
今天算是看这个程序的第二天了吧。关于画图方面的功能熟悉的差不多了。主要是从设计框架上理解。本人对这个比较感兴趣,想往架构方面发展。
以下是我对DrawTool画图部分的阶段性理解.
程序当中的MainForm就不用管了,无非就是提供给用户操作接口。获取各种所需参数而已,画图部分主要从DrawArea控件开始。我们可以把它通俗的理解成画布。
画图模块介绍:
DrawArea(画布)中可以包含多个Layer(层),每个Layer上可以包含多个DrawObject(图形).
出于对多个Layer的管理,作者新建一个Layers,用来对多个层的可见性,活跃性等等的管理。
同样,作者为了对多个DrawObject进行管理,新建了GraphicsList类,用来对多个DrawObject对象进行管理。
通过上面的说明,清楚了画布,层,图形之间的存在形式。
下面,我们考虑一下,怎么样绘出图形来呢。
用过画图工具的都知道,当我画一个图形时,首先要选择绘画对象,比如要画一个矩形。
绘画过程,可以分成三步:第一步,按下鼠标左键。第二步,拖动鼠标。第三步,松下鼠标,即可完成图形绘制。
ToolObject类是用来绘制图形的工具类,实质上当中正是包含了,上面所述的绘制过程。
OnMouseDown
OnMouseMove
OnMouseDown
三个步骤。
具体的图形绘制类,要继承自这个类。比如ToolRectangle就要继承自这个类。
DrawArea中包含一个ToolOject集合,当用户触发
OnMouseDown
OnMouseMove
OnMouseDown
时,通过调用ToolOject中相应的方法(OnMouseDown,OnMouseMove,OnMouseDown),实现图形的绘制。