在上一篇随笔中,写了一点对Netron的初步认识,简单分析了下Netron中的三个基本图形实体:ShapeBase,Connection,Connector.但是这个三个实体只是三个光棍司令.他们怎么显示在窗体上呢?OK.下面,Netron的下一个主角即将登场.
    Netron中,有一个继承自.net framework中的System.Windows.Forms.ScrollableControl控件GraphControl,他在Netron中充当一个"容器"的角色(之所以加上引号,是为了和我们框架使用的IOC容器区分下).Netron中的所有图形实体都在他里面进行显示,控制.我将其部分重要的域和方法拿出来说明一下.

GraphControl中的关键域:

protected ShapeCollection shapes; protected ConnectionCollection connections;

shapes域保存的是GraphControl中所有的ShapeBase对象.ShapeCollection是一个继承自System.Collections.CollectionBase的集合类,也就是对ShapeBase对象进行添加,删除,检索等操作,很简单,不细谈.connections类似,保存的是Conncetion对象集合.(这里有一个值得改进的地方,由于该版本的Netron是在.net1.1下开发的,没有利用到.net2.0泛型的优点,这样,当以后图形元素不断增加,这类Collection对象将会随之增多,但他们内部代码都是大同小异的,完全可以用一个泛型集合代替)

protected Entity hoveredEntity; protected Entity selectedEntity;

hoveredEntity域保存的是鼠标悬浮到的图形实体对象,得到这个对象的目的是当鼠标移动到某个实体上的时候,改变该图形实体的外观(比如:将其周边线条变为红色).selectedEntity域保存的是一个被鼠标选中的唯一图形实体,以达到选中一个图形对象,然后进行相关操作的目的.

protected bool tracking = false;

该域表示是否应该进行鼠标轨迹的追踪,在进行图形元素拖动的时候将会利用到这个域.

GraphControl的构造器
    这个很简单,大概的看一下,以达到理解该"容器"的构造行为.

public GraphControl() { //double-buffering SetStyle(ControlStyles.AllPaintingInWmPaint, true); SetStyle(ControlStyles.DoubleBuffer, true); SetStyle(ControlStyles.UserPaint, true); SetStyle(ControlStyles.ResizeRedraw, true); //init the collections shapes = new ShapeCollection(); connections = new ConnectionCollection(); //menu menu = new ContextMenu(); BuildMenu(); this.ContextMenu = menu; //init the randomizer rnd = new Random(); //init the proxy proxy = new Proxy(this); }

GraphControl中的关键方法

public ShapeBase AddShape(ShapeBase shape) public ShapeBase AddShape(ShapeTypes type, Point location)

这两个重载方法提供向GraphControl添加基本图形对象(椭圆,矩形...)的功能.

public Connection AddConnection(Connection con) public Connection AddConnection(Point startPoint) public Connection AddConnection(Connector from, Connector to) public Connection AddConnection(Point from, Point to)

这四个重载方法提供向GraphControl添加图形对象间连线对象的功能.

protected override void OnMouseDown(MouseEventArgs e) protected override void OnMouseUp(MouseEventArgs e) protected override void OnMouseMove(MouseEventArgs e)

这三个重载方法对图形的选择,拖动起到了至关重要的作用.在以后的随笔中将深入其内部进行分析.
   
    OK.该"容器"的登场亮相到此结束,现在,你对Netron的大体实现原理是否已经有了一个宏观上的认识呢?继续学习研究吧.

----2005.12.22 23:31 星期四


文章来源:http://www.agilelabs.cn/blogs/woody/archive/2005/12/22/296.aspx

转载于:https://www.cnblogs.com/veryverygood/archive/2006/01/16/318054.html

[导入]Netron研究(二)----容器登场相关推荐

  1. 洛河98计算机学校王艳,小学语文课堂导入设计研究实施方案

    小学语文课堂导入设计研究实施方案 宝塔区冯庄学校课题组 王艳 当前,许多语文教师多关注学习目标及内容所运用的方法策略,对于语文课堂的开讲导入思考较少.针对语文教师开讲随意或单刀直入不讲究科学性.艺术性 ...

  2. java在容器中导入图片_Java程序员必学技术:@Import直接导入类,在容器@Configuration、@Component中是怎么直接导入类注册到容器的?...

    Java程序员必学技术:@Import直接导入类,在容器@Configuration.@Component中是怎么直接导入类注册到容器的? Spring IoC 容器是一个管理 Bean 的容器,在 ...

  3. 二维burgers方程_用格子Boltzmann方法研究二维Burgers方程

    用格子 Boltzmann 方法研究二维 Burgers 方程 张伟 ; 李文杰 [期刊名称] <天津城市建设学院学报> [年 ( 卷 ), 期] 2012(018)001 [ 摘 要 ] ...

  4. 数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据

    数据转换成二维码并导出进Excel中和导入时解码二维码反转成数据 第一步在maven中配置需要的二维码jar包 1.1 谷歌提供的帮助类 1.2 关于二维码的工具类 1.3 测试类 第二步 在Exce ...

  5. JAVA 虚拟机深入研究(二)——JVM虚拟机发展以及一些Java的新东西

    内容目录: JAVA 虚拟机深入研究(一)--关于Java的一些历史 JAVA 虚拟机深入研究(二)--JVM虚拟机发展以及一些Java的新东西 这是第二篇,我们来说说有关虚拟机的发展. 一说到虚拟机 ...

  6. Fiddler实战深入研究(二)

    Fiddler实战深入研究(二) 阅读目录 Fiddler不能捕获chrome的session的设置 理解数据包统计 请求重定向(AutoResponder) Composer选项卡 Filters选 ...

  7. Fiddler实战深入研究(二)——模拟返回数值

    转自大神:https://www.cnblogs.com/tugenhua0707/p/4637771.html ------------------------------------------- ...

  8. Fiddler实战深入研究(二)[转载]

    Fiddler实战深入研究(二) 阅读目录 Fiddler不能捕获chrome的session的设置 理解数据包统计 请求重定向(AutoResponder) Composer选项卡 Filters选 ...

  9. 数字货币综合虚拟货币交易平台源码(基于thinkphp框架)中英文切换适合学习研究 二开

    源码简介: 数字货币合约交易源码,综合虚拟货币交易平台源码(基于thinkphp框架)中英文切换 支pc+h5 持委托交易,买卖交易市场等等功能 这个框架适合二开 好多比较好一点的交易所都是基于这个二 ...

最新文章

  1. JavaScript:事件冒泡和事件委托
  2. [Objective-c基础教程] chapter one Before You Start chapter two Extensions to C
  3. 神经网络 | 玻尔兹曼机(附python源代码)
  4. python居中填充_Python代码中 如何将字符串填充为指定长度并保持原字符串居中呢?...
  5. 点击显示底框颜色,默认显示第一个。
  6. php phpexcel用法,PHPExcel用法总结
  7. USACO-Section1.4 Prime Cryptarithm (搜索)
  8. android java调用_关于Android中Java调用外部命令的三种方式
  9. 国家广电总局:常规电视剧剧集正片时长不少于41分钟
  10. 转js 将json字符串转换为json对象的方法解析
  11. [Ext JS 4] Grid 组件
  12. java zookeeper 使用_Zookeeper简介
  13. Linux的远程传输文件scp及出现Permission denied (publickey).lost connection问题解决方法
  14. Qt网络编程-TcpClient入门Demo(1)
  15. php 写ps功能,ps的作用是什么
  16. 【MTSP】遗传和粒子群算法求解多旅行商问题【Matlab 1156期】
  17. Hexo even主题博客配置
  18. 公证通Factom白皮书
  19. opencv-python 实现截取图片中的多边形、圆形区域
  20. 【图文】实操重置密码

热门文章

  1. 禁用内存清理_win10电脑开机内存占用高达80%以上如何解决
  2. python基本对象_python基础教程:运算对象、运算符、表达式和语句
  3. 被替换的项目不是替换值长度的倍数_如果要在Excel中计算单元格内指定的字符长度,我推荐这两个公式.........
  4. PCB设计中焊盘的种类,你都见过几种?
  5. LL-verilog-HDLBitSim/circuit10解答和过程详解
  6. 电路常识性概念(3)-TTL与CMOS集成电路
  7. java调用百度推送详解_Java 以 Post 方式实现百度 Sitemap 实时推送
  8. 基于c语言画图软件,大佬们,小菜鸟想问一问用vc编译器做简易画图软件
  9. 服务器端接华为sdk无响应,sdk未响应
  10. matlab中std和std2的区别,matlab 关于std,std2,mean,mean2初步认识