日韩无码专区无码一级三级片|91人人爱网站中日韩无码电影|厨房大战丰满熟妇|AV高清无码在线免费观看|另类AV日韩少妇熟女|中文日本大黄一级黄色片|色情在线视频免费|亚洲成人特黄a片|黄片wwwav色图欧美|欧亚乱色一区二区三区

RELATEED CONSULTING
相關(guān)咨詢
選擇下列產(chǎn)品馬上在線溝通
服務(wù)時(shí)間:8:30-17:00
你可能遇到了下面的問題
關(guān)閉右側(cè)工具欄

新聞中心

這里有您想知道的互聯(lián)網(wǎng)營(yíng)銷解決方案
ArcEngine開發(fā):右鍵菜單的設(shè)計(jì)與實(shí)現(xiàn)

利用ArcGIS Engine開發(fā)自定義GIS應(yīng)用程序中,一般有兩種方式來建立右鍵菜單。

一是利用開發(fā)工具自帶的右鍵菜單控件,如Visual Studio中的ContextMenuStrip控件;

二是利用ArcGIS Engine封裝好的IToolbarMenu接口。相比較而言,前者實(shí)現(xiàn)起來較簡(jiǎn)單,但后者使程序具有更好的面向?qū)ο笮裕哺跀U(kuò)展,在大型系統(tǒng)中,使用該方法是較好的選擇。

本文詳細(xì)講述如何利用IToolbarMenu接口實(shí)現(xiàn)右鍵菜單功能。

設(shè)計(jì)程序主界面如下圖所示:

在FrmMain類中首先定義如下指針:

 
 
 
 
  1. private ITOCControl2 pTocControl;   
  2. private IMapControl3 pMapControl;   
  3. private IToolbarMenu pToolMenuMap;   
  4. private IToolbarMenu pToolMenuLayer;  

在FrmMain窗體的加載事件中初始化這些指針:

 
 
 
 
  1. // 取得 MapControl 和 PageLayoutControl 的引用   
  2. pTocControl = (ITOCControl2)axTOCControl1.Object;   
  3. pMapControl = (IMapControl3)axMapControl1.Object;   
  4. // 創(chuàng)建菜單   
  5. pToolMenuMap = new ToolbarMenuClass();   
  6. pToolMenuLayer = new ToolbarMenuClass();  

如此便建立了新的菜單,但其中沒有實(shí)際的菜單項(xiàng),具體的命令或者工具必須作為菜單項(xiàng)添加到菜單中才能實(shí)現(xiàn)相應(yīng)的功能。

在添加菜單項(xiàng)之前,得先實(shí)現(xiàn)相應(yīng)命令或工具。下面自定義一個(gè)縮放至圖層的命令,添加一個(gè)類ZoomToLayer.cs至該項(xiàng)目,繼承自ESRI.ArcGIS.ADF.BaseClasses.BaseCommand。BaseCommand是一個(gè)抽象類,它為開發(fā)人員建立自定義命令項(xiàng)提供了一種有效的途徑。重寫基類的OnCreate和OnClick方法,實(shí)現(xiàn)縮放圖層至完整的顯示于地圖控件中。完整代碼如下。

 
 
 
 
  1. using System;   
  2. using System.Collections.Generic;   
  3. using System.Text;   
  4. using ESRI.ArcGIS.ADF.BaseClasses;   
  5. using ESRI.ArcGIS.Carto;   
  6. using ESRI.ArcGIS.Controls;   
  7. namespace ArcEngine3_3   
  8. {   
  9. class ZoomToLayer : BaseCommand   
  10. {   
  11. //定義指針   
  12. private IMapControl3 pMapControl;   
  13. public ZoomToLayer()   
  14. {   
  15. base.m_caption = "放大至該圖層";   
  16. }   
  17. //重寫B(tài)aseCommand基類的虛擬方法OnClick()   
  18. public override void OnClick()   
  19. {   
  20. ILayer pLayer = (ILayer)pMapControl.CustomProperty;   
  21. pMapControl.Extent = pLayer.AreaOfInterest;   
  22. }   
  23. //重寫B(tài)aseCommand基類的抽象方法OnCreate(object hook)   
  24. public override void OnCreate(object hook)   
  25. {   
  26. pMapControl = (IMapControl3)hook;   
  27. }   
  28. }   
  29. }  

除自定義實(shí)現(xiàn)命令或者工具之外, ArcGIS Engine內(nèi)置了許多可以直接調(diào)用的常用命令和工具,如ControlsAddDataCommandClass、ControlsClearSelectionCommandClass等,也可以直接調(diào)用AE內(nèi)置的菜單,如ControlsFeatureSelectionMenu。

建立好自定義命令或工具后,就可以向菜單中添加對(duì)應(yīng)的菜單項(xiàng)了。在FrmMain窗體的加載事件中添加菜單項(xiàng)。

 
 
 
 
  1. pToolMenuLayer.AddItem(new ZoomToLayer(), -1, 0, true, esriCommandStyles.esriCommandStyleTextOnly);  

設(shè)置菜單的hook

 
 
 
 
  1. pToolMenuLayer.SetHook(pMapControl);  

現(xiàn)在有了菜單,需要在TocControl中右鍵彈出,所以在其OnMouseDown/OnMouseUp事件中獲取鼠標(biāo)點(diǎn)擊信息,然后彈出對(duì)應(yīng)菜單即可。

 
 
 
 
  1. //獲取鼠標(biāo)點(diǎn)擊信息   
  2. axTOCControl1.HitTest(e.x, e.y, ref pTocItem, ref pBasicMap, ref pLayer, ref oLegendGroup, ref oIndex);   
  3. if (e.button == 2)   
  4. {   
  5. if (pTocItem == esriTOCControlItem.esriTOCControlItemMap)   
  6. {   
  7. pTocControl.SelectItem(pBasicMap, null);   
  8. }   
  9. else   
  10. {   
  11. pTocControl.SelectItem(pLayer, null);   
  12. }   
  13. //設(shè)置CustomProperty為layer (用于自定義的Layer命令)   
  14. pMapControl.CustomProperty = pLayer;   
  15. //彈出右鍵菜單   
  16. if (pTocItem == esriTOCControlItem.esriTOCControlItemMap)   
  17. {   
  18. pToolMenuMap.PopupMenu(e.x, e.y, pTocControl.hWnd);   
  19. }   
  20. else   
  21. {   
  22. pToolMenuLayer.PopupMenu(e.x, e.y, pTocControl.hWnd);   
  23. }   
  24. }  

用同樣的方法可以為TocControl中的地圖、圖層、符號(hào)以及為MapControl等添加各自的右鍵菜單。最終實(shí)現(xiàn)效果如下。


新聞標(biāo)題:ArcEngine開發(fā):右鍵菜單的設(shè)計(jì)與實(shí)現(xiàn)
網(wǎng)站路徑:http://m.5511xx.com/article/coidcci.html