日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

[导入]Netron研究(二)----容器登场

發布時間:2023/12/18 编程问答 36 豆豆
生活随笔 收集整理的這篇文章主要介紹了 [导入]Netron研究(二)----容器登场 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

??? 在上一篇隨筆中,寫了一點對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研究(二)----容器登场的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。