Visual Graph图形控件的文件结构
版权声明:原创作品,如需转载,请与作者联系。否则将追究法律责任。 |
文件采用多页面形式,所有页面共享同一个windows窗口,因此可以通过换页看到不同的画面。文件的SheetCount属性返回页面总数,第一个页面是Sheets[0],当前工作的页面是ActiveSheet,页面有很多特有的属性、方法和事件。
从上面的描述中能够看出,我们似乎有可能把页面当作一个图形元件,因为页面和它上面的图形对象的关系与图形元件和它内部的图形对象的关系很相似。事实上,Visual Graph的页面正好就是从图形元件派生下来的。
这样我们就可以顺理成章地考虑把图形文件当做元件库,它上面的每个页面被看作元件。Visual Graph没有专门的图库格式,它的图库也就是图形文件!这种概念上的统一,将带来极大的便利,用户在学会画图的时候,同时也就学会了如何制作图库。
当图元被插入其他文件的页面中时,我们看到了页面(图元)的嵌套。这种嵌套带来的好处是巨大的,因为我们有可能开发更为复杂的图形元件。例如我们可以制作一个列表框元件,它内部有一个滚动条,而滚动条元件内部是由两个按钮元件、一个划块元件和若干矩形组成,而按钮元件又是由若干线条、矩形组成的。每一个元件有自己特殊的属性、方法和事件,而它们组合出的新元件又有其他特殊的属性、方法和事件。熟悉C#和Delphi的程序员都知道,Visual Graph的设计思路和它们极为相似。如果说Visual Graph图形引擎又是一种编程语言,谁也不应该感到奇怪。
现在再回到页面,其实页面还有两个概念,图层和单元组。
首先是图层,默认状况下,视图只显示当前页面,但还有一种状况,可以允许在画面上同时显示多个页面,类似一般地理信息系统中的图层概念,页面可以隐藏,也可以锁定。
有时候,一张图上有很多各种各样的图形,为了对它们加强管理,需要进行分组,分组其实只是逻辑上的分组,并不是真的把一些图形集中组合在一起,例如图形a和b可以是一组,同时a和c又是在另一组。这些单元组被保存在文件中。
当我们在画图的时候,经常要用鼠标选中某几个图形,在页面上有一个临时性的单元组,叫做选择组,它是被选择部分的集合。选择组和单元组的唯一差别是它不能被保存到文件中。
图形有运行(Run)和编辑(Design)两种状态,在运行状态,图形可以响应鼠标事件做出动作,而在编辑状态,鼠标可以选择图形、拖动或者改变图形的大小。
下面是一个典型的Visual Graph视图文件格式:
大致解释一下:
第二行表示文件版本是7版,文件中使用的栅格大小是8(栅格能够方便图形的排版和定位),工作区的范围为1024 X 708,工作区很大的时候,拖动滚动条能够看到画面上其他部分的图形。
第三行表示打印纸。
第四行表示页面。
第五行表示页面上放了一个椭圆,并且指定了这个椭圆的位置和宽、高,还有椭圆的旋转中心的位置。
第六行表示一个元件。
第七行和第八行两个矩形是包含在上面那个元件中的。
第十行表示当前页面上有一个单元组,这个单元组包含两个单元。
仔细观察这个文件,它有如下特点:
1、结构简单:
在第一行文件头下面是视图节点vg,这里存放视图类的各种属性(包括自定义属性)。
在页面节点里面是图形节点。如果图形是元件单元,那么这个节点里面可能还会有其他图形节点。
2、扩充性好:
在页面节点中,我们看到有一个myprop属性,该属性中保存了一个整数123,这是一个自定义属性,Visual Graph系统的自定义属性和普通属性在存储和程序访问上没什么差别。所以非常便于扩充。 本文出自 “tmly” 博客,转载请与作者联系! 本文出自 51CTO.COM技术博客 |


zgj67
博客统计信息
热门文章
最新评论
友情链接