




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、第三讲第三讲 Application Framework 03主要内容主要内容pArcGIS Base Classp自定义自定义Command,Tool的方法的方法p自定义自定义Toolbar,Menu的方法的方法p简单的简单的MapControl Applicationp添加右键菜单添加右键菜单p创建动态菜单创建动态菜单p自定义地图浏览程序自定义地图浏览程序ArcGIS Base Classp程序集程序集ESRI.ArcGIS.ADFn包含包含Base Class,都是抽象类,只能用于继承,而,都是抽象类,只能用于继承,而不能实例化不能实例化n用户通过继承用户通过继承Base Class创建
2、自己的组件创建自己的组件n只能继承于其中一个类只能继承于其中一个类ArcGIS Base Classp可以被继承的类可以被继承的类ArcGIS item templates自定义自定义Command,Tool的方法的方法p实现实现ICommand接口接口n必须重写必须重写OnCreate,OnClick方法方法p实现实现ITool接口接口n重写重写OnCreate,OnMouseDown,OnMouseMove,OnMouseUp方法方法p继承继承BaseCommand,BaseTool类类n这两个基类提供了这两个基类提供了ICommand或或ITool接口所有方接口所有方法的通用实现代码,根
3、据需要重写其中的方法法的通用实现代码,根据需要重写其中的方法nBaseCommand的的OnCreate方法必须重写方法必须重写n属性根据自己需要重新赋值属性根据自己需要重新赋值自定义自定义Command,Tool的方法的方法p基类各属性值基类各属性值自定义自定义Command,Tool的方法的方法p使用使用ArcGIS Item Templates添加添加nArcGIS Base Command和和Base Tool templates继承于抽象类继承于抽象类BaseCommand和和BaseTooln自动添加资源文件,如图标文件自动添加资源文件,如图标文件n自动重写自动重写OnCreate
4、方法,将传进来的方法,将传进来的Hook赋值给赋值给相应属性相应属性p通过通过IHookHelper类型的对象与类型的对象与“钩子钩子”对象相关联对象相关联n自动添加自定义自动添加自定义Command和和Tool的的GUID自定义自定义Command,Tool的方法的方法自定义自定义Toolbar,Menu的方法的方法p实现实现IToolbarDef接口接口n用用IToolbarControl.AddToolbarDef方法将自定方法将自定义的工具添加到已有的工具条上义的工具添加到已有的工具条上p实现实现IMenuDef接口接口nDesktopp右键菜单,实现右键菜单,实现IMenuDef,I
5、ShortcutMenu接口接口p一般菜单,实现一般菜单,实现IMenuDef,IRootLevelMenu接口接口nEnginep实现实现IToolbarMenu接口接口自定义自定义Toolbar,Menu的方法的方法p继承继承BaseToolbar,BaseMenu类类n重载的重载的AddItem方法,可以根据方法,可以根据UID,ProgID,CLSID,System.Guid,System.Type添加项目添加项目n若添加项目时,若添加项目时,ID出错,则运行时在出错,则运行时在CommandBar上显示占位符上显示占位符nBeginGroup方法用来添加分隔线方法用来添加分隔线自定义
6、自定义Toolbar,Menu的方法的方法p使用使用ArcGIS Item Templates添加添加简单的简单的MapControl Appplicationp运用运用ArcGIS集成开发环境创建集成开发环境创建p已有的已有的Command对象的用法对象的用法p基于基于BaseCommand类创建自定义类创建自定义Command类类nIHookHelper添加右键菜单添加右键菜单p向已有项目中添加向已有项目中添加ContextMenup向自定义向自定义ContextMenu中加中加Command对象对象nSetHook()方法方法nAddItem()方法方法nUID对象对象nGuid结构:表
7、示全局唯一标识符结构:表示全局唯一标识符 public void SetHook(object hook) m_toolbarMenu = new ToolbarMenuClass(); m_toolbarMenu.SetHook(hook); / / TODO: Define context menu items here / AddItem(esriControls.ControlsMapZoomOutFixedCommand, -1); AddItem(esriControls.ControlsMapZoomInFixedCommand, -1); BeginGroup(); /Sepa
8、rator AddItem(380FB31E-6C24-4F5C-B1DF-47F33586B885, -1); /undo command AddItem(new Guid(B0675372-0271-4680-9A2C-269B3F0C01E8), -1); /redo command /BeginGroup(); /Separator /AddItem(MyCustomCommandCLSIDorProgID, -1);添加右键菜单添加右键菜单p实例化右键菜单(实例化右键菜单(ContextMenu)对象)对象nprivate EngineContextMenu1 m_contextMe
9、nu = new EngineContextMenu1();p将右键菜单对象将右键菜单对象“钩钩”到相应的到相应的AE控件上控件上n /get the MapControlnm_mapControl = (IMapControl3)axMapControl1.Object;nm_contextMenu.SetHook(m_mapControl);添加右键菜单添加右键菜单p当窗体上已经存在当窗体上已经存在ToolBarControl时,应将时,应将IToolBarMenu的的CommandPool属性设置属性设置为为ToolBarControl的的CommandPool属性值,属性值,以保证添加
10、到工具条控件和右键菜单的以保证添加到工具条控件和右键菜单的Command对象的唯一性对象的唯一性添加右键菜单添加右键菜单 /get the MapControlm_mapControl = (IMapControl3)axMapControl1.Object;IToolbarControl toolBarControl = (IToolbarControl)axToolbarControl1.Object;m_contextMenu.SetHook(toolBarControl.Buddy);IToolbarMenu2 toolBarMenu = m_contextMenu.ContextMe
11、nu;toolBarMenu.CommandPool = toolBarControl.CommandPool;添加右键菜单添加右键菜单p在右键菜单的关联在右键菜单的关联AE控件右键单击事件中添加代控件右键单击事件中添加代码,显示菜单码,显示菜单 if (e.button = 2) m_contextMenu.PopupMenu(e.x, e.y, axMapControl1.hWnd);UIDClasspCOM组件中的接口(组件中的接口(interface)与)与coclass(类)用(类)用全局唯一标识(全局唯一标识(Globally Unique Identifier)进行)进行区分区分
12、p接口的接口的GUID称为接口称为接口ID,即,即IIDpcoclass的的GUID称为类称为类ID,即,即CLSIDpProgID为为CLSID的别名,由项目名与类名组成的别名,由项目名与类名组成p已有的已有的Command,Menu等对象的等对象的GUID/ProgID对照表:对照表:nEngine Developer Help-Building solutions with ArcGIS Engine using .NET-General reference-Commands in ArcGIS EngineUIDClass补充补充pGUID,ProgID ,CLSID和和UIDnGUI
13、D(全局统一标识符全局统一标识符)是用來標識識別是用來標識識別COM接口和組件,保证它們的接口和組件,保证它們的唯一性,避免出現版本不一致而導致的組件沖突唯一性,避免出現版本不一致而導致的組件沖突.IID就是接口的就是接口的GUID表示,表示,CLSID則是組件類的則是組件類的GUID表示。表示。ProgID是程序员给某个是程序员给某个CLSID指定一个易记的名字指定一个易记的名字.UID則是則是对对象(象(Object)的的GUID.nESRI接口存放在注冊表中的接口存放在注冊表中的 HKEY_CLASSES_ROOT下面,如果想下面,如果想查詢它們的查詢它們的UID,可以通過查找它們的名字
14、,從而找到對應的,可以通過查找它們的名字,從而找到對應的UID。以。以下是一些下是一些ILayer接口的接口的UID:6CA416B1-E160-11D2-9F4E-00C04F6BC78E IDataLayer40A9E885-5533-11d0-98BE-00805F7CED21 IFeatureLayerE156D7E5-22AF-11D3-9F99-00C04F6BC78E IGeoFeatureLayer34B2EF81-F4AC-11D1-A245-080009B6F22B IGraphicsLayer5CEAE408-4C0A-437F-9DB3-054D83919850 IFD
15、OGraphicsLayerEDAD6644-1810-11D1-86AE-0000F8751720 IGroupLayerD02371C7-35F7-11D2-B1F2-00C04F8EDEFF IRasterLayer创建动态菜单创建动态菜单p实现实现IMultiItem,IMulitItemEx(可选)接(可选)接口口p不需要实现不需要实现ICommand接口,不能添加到接口,不能添加到Customize Dialog Box的的Command List中,只能在菜单上出现,拥有不确定数目的菜单中,只能在菜单上出现,拥有不确定数目的菜单项项创建动态菜单创建动态菜单p步骤步骤n用用ArcG
16、IS Item Templates添加添加ArcGIS Class创建动态菜单创建动态菜单p步骤步骤n添加添加IHookHelper类型的私有成员类型的私有成员pprivate ESRI.ArcGIS.Controls.IHookHelper m_hookHelper;n实现实现Caption, Name, Message, HelpContextID, HelpFile等属性等属性n实现实现OnPopUp方法,该方法在包含方法,该方法在包含MultiItem的菜单出现之的菜单出现之前被调用,实现两个功能,获取钩子对象,返回前被调用,实现两个功能,获取钩子对象,返回MultiItem包含包含的
17、子项目数的子项目数n在在OnPopUp方法被调用之后,方法被调用之后,framework为每个子项创建一为每个子项创建一个个CommandItem,并且指定每个子项的,并且指定每个子项的ItemBitmap,ItemCaption,ItemChecked,ItemEnabled属性属性创建动态菜单创建动态菜单p步骤步骤n添加该添加该OnItemClick方法的实现代码,当包含的菜方法的实现代码,当包含的菜单项都显示出来以后,用户点击后则调用该方法单项都显示出来以后,用户点击后则调用该方法n实现实现IMulitItemEx接口(可选)接口(可选)n将该类注册到相关的目录下,使用将该类注册到相关的
18、目录下,使用“Add Component Category”工具工具n显示动态菜单显示动态菜单自定义地图浏览程序自定义地图浏览程序p加载加载ArcGIS Engine Controlp添加引用添加引用nProject-Add ArcGIS Referencep将控件拖放到窗口上将控件拖放到窗口上n修改窗体名称修改窗体名称nMapControl, PageLayoutControl, ToolbarControl, TOCControl, LicenseControlp添加命名空间添加命名空间nusing ESRI.ArcGIS.Carto; nusing ESRI.ArcGIS.Control
19、s; nusing ESRI.ArcGIS.Display; nusing ESRI.ArcGIS.Geometry; nusing ESRI.ArcGIS.SystemUI; nusing ESRI.ArcGIS.esriSystem;自定义地图浏览程序自定义地图浏览程序p配置配置Licensep加载地图文件到加载地图文件到MapControl,TOCControlstring fileName = .dataGulf_of_St._Lawrence.mxd;if (axPageLayoutControl1.CheckMxFile(fileName) axPageLayoutControl1
20、.LoadMxFile(fileName, ); 自定义地图浏览程序自定义地图浏览程序p当当PageLayoutControl中的地图文件发生变中的地图文件发生变化时,更新化时,更新MapControl的显示内容的显示内容private void axPageLayoutControl1_OnPageLayoutReplaced(object sender, IPageLayoutControlEvents_OnPageLayoutReplacedEvent e) /Load the same pre-authored map document into the MapControl. axM
21、apControl1.LoadMxFile(axPageLayoutControl1.DocumentFilename, null, null); /Set the extent of the MapControl to the full extent of the data. axMapControl1.Extent = axMapControl1.FullExtent; 自定义地图浏览程序自定义地图浏览程序p设置伙伴控件设置伙伴控件p锚定控件锚定控件n设置各控件的设置各控件的anchor属性属性private void MapViewer_Load(object sender, Syste
22、m.EventArgs e) /Set buddy controls. axTOCControl1.SetBuddyControl(axPageLayoutControl1); axToolbarControl1.SetBuddyControl(axPageLayoutControl1); 自定义地图浏览程序自定义地图浏览程序p当窗体大小改变时,阻止当窗体大小改变时,阻止MapControl,PageLayoutControl中的地图不断自动重绘中的地图不断自动重绘private void MapViewer_ResizeBegin(object sender, EventArgs e) /S
23、uppress data redraw and draw bitmap instead. axMapControl1.SuppressResizeDrawing(true, 0); axPageLayoutControl1.SuppressResizeDrawing(true, 0); private void MapViewer_ResizeEnd(object sender, EventArgs e) /Stop bitmap draw and draw data. axMapControl1.SuppressResizeDrawing(false, 0); axPageLayoutCon
24、trol1.SuppressResizeDrawing(false, 0); 自定义地图浏览程序自定义地图浏览程序p添加工具条命令添加工具条命令private void MapViewer_Load(object sender, EventArgs e) /Add generic commands. axToolbarControl1.AddItem(esriControls.ControlsOpenDocCommand, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.Add
25、Item(esriControls.ControlsAddDataCommand, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); /Add page layout navigation commands. axToolbarControl1.AddItem(esriControls.ControlsPageZoomInTool, - 1, - 1, true, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem(es
26、riControls.ControlsPageZoomOutTool, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem(esriControls.ControlsPagePanTool, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem(esriControls.ControlsPageZoomWholePageCommand, -
27、 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);/Add map navigation commands. axToolbarControl1.AddItem(esriControls.ControlsMapZoomInTool, - 1, - 1, true, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem(esriControls.ControlsMapZoomOutTool, - 1, - 1, false, 0
28、, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem(esriControls.ControlsMapPanTool, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem(esriControls.ControlsMapFullExtentCommand, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOn
29、ly); axToolbarControl1.AddItem(esriControls.ControlsMapZoomToLastExtentBackCommand, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem( esriControls.ControlsMapZoomToLastExtentForwardCommand, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);/Add
30、 map inquiry commands. axToolbarControl1.AddItem(esriControls.ControlsMapIdentifyTool, - 1, - 1, true, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.AddItem(esriControls.ControlsMapFindCommand, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); axToolbarControl1.Add
31、Item(esriControls.ControlsMapMeasureTool, - 1, - 1, false, 0, esriCommandStyles.esriCommandStyleIconOnly); /Set buddy controls.自定义地图浏览程序自定义地图浏览程序p为为PageLayoutControl添加右键菜单添加右键菜单public partial class MapViewer: Form /The pop-up menu. private IToolbarMenu m_ToolbarMenu;private void MapViewer_Load(objec
32、t sender, EventArgs e) /Create a new ToolbarMenu. m_ToolbarMenu = new ToolbarMenuClass(); /Share the ToolbarControls command pool. m_ToolbarMenu.CommandPool = axToolbarControl1.CommandPool; /Set the hook to the PageLayoutControl. m_ToolbarMenu.SetHook(axPageLayoutControl1); /Add commands to the Tool
33、barMenu. m_ToolbarMenu.AddItem(esriControls.ControlsPageZoomInFixedCommand, - 1, - 1, false, esriCommandStyles.esriCommandStyleIconAndText); m_ToolbarMenu.AddItem(esriControls.ControlsPageZoomOutFixedCommand, - 1, - 1, false, esriCommandStyles.esriCommandStyleIconAndText); m_ToolbarMenu.AddItem(esri
34、Controls.ControlsPageZoomWholePageCommand, - 1, -1, false, esriCommandStyles.esriCommandStyleIconAndText); m_ToolbarMenu.AddItem(esriControls.ControlsPageZoomPageToLastExtentBackCommand, - 1, - 1, true, esriCommandStyles.esriCommandStyleIconAndText);m_ToolbarMenu.AddItem(esriControls.ControlsPageZoo
35、mPageToLastExtentForwardCommand, - 1, - 1, false, esriCommandStyles.esriCommandStyleIconAndText);private void axPageLayoutControl1_OnMouseDown(object sender, IPageLayoutControlEvents_OnMouseDownEvent e) /Pop-up the ToolbarMenu. if (e.button = 2) m_ToolbarMenu.PopupMenu(e.x, e.y, axPageLayoutControl1
36、.hWnd);显示右键菜单显示右键菜单private void MapViewer_Load(object sender, EventArgs e) /Create a new ToolbarPalette. IToolbarPalette toolbarPalette = new ToolbarPaletteClass(); /Add commands and tools to the ToolbarPalette. toolbarPalette.AddItem(esriControls.ControlsNewMarkerTool, - 1, - 1); toolbarPalette.AddItem(esriControls.ControlsNewLineTool, - 1, - 1); toolbarPalette.AddItem(esriControls.ControlsNewCircleTool, - 1, - 1); toolbarPalette.AddIt
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 化工园区污水处理厂工程施工方案
- BIM在建筑工程施工质量追踪中的应用
- 2025年血透试题及答案
- 血管内导管相关性血流感染预防与诊治指南2025年解读
- 2024版45081-2024人工智能管理体系培训教材
- 2025年眼耳鼻喉科中医理论考试试题(附答案)
- 生物安全专员知识培训总结
- 2025年5月质量管理体系基础知识真题(带答案)
- 建筑幕墙灯光照明集成方案
- 隧道内电力设施安全安装方案
- DB11∕T 2341-2024 城市轨道交通车辆主动式障碍物检测系统应用技术要求
- 基于单片机技术的智能家居远程监控系统设计与实践
- 白酒质量安全知识培训课件
- 大学生心理健康教育(兰州大学)
- 安平丝网知识培训课件
- 医院感染管理的重要性
- 2025年中石油英语试题及答案
- 口腔门诊客户投诉处理与管理
- 统编版(2024)八年级上册历史全册教材问题参考答案
- 《电工电子技术》课件-第1章 电路理论基础及分析方法
- 《无人机飞行控制技术》全套教学课件
评论
0/150
提交评论