转自Love Lyre原文 ArcEngine的ToolbarControl解析

ToolbarControlClass有三个主要的接口:

 IToolbarControl, IToolbarControl2, IToolbarControlDefault  

其中,IToolbarControl2是IToolbarControl的新版本.而IToolbarControlDefault is a 'pure' dispatch interface,始终是IToolbarControl的最新的版本,也就是如果有 了IToolbarControl3,那么IToolbarControlDefault就是IToolbarControl3.

在IToolbarControlDefault中有三个Members可以向ToolbarControl添加项:

AddItem():向ToolbarControl添加一个item,支持实现了 ICommand, IMenuDef, IToolbarMenu, ITool, IToolControl,  IPaletteDef and   IToolbarPalette的类.

AddMenuItem():向ToolbarControl添加一个menu item,是AddItem的一个简略(剪切)版,支持实现了 IMenuDef,IToolbarMenu的类

AddToolbarDef():向 ToolbarControl添加定制的工具item.

下面以AddItem 为例:

第一个参数是object类型,基本可以是这:UID,ProgID,接口(ICommand,IToolBarDef ...),例如

//Adding a command by UIDUID uID = new UIDClass();uID.Value = "esriControls.ControlsMapFullExtentCommand";axToolbarControl1.AddItem(uID,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

//Adding a command by ProgIDstring progID = "esriControls.ControlsMapFullExtentCommand";axToolbarControl1.AddItem(progID,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

//Adding a command by ICommandICommand command = new ControlsMapFullExtentCommandClass();axToolbarControl1.AddItem(command,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly);

 

ToolbarControl内部有一个CommandPool,用来存放管理Command.当向ToolbarControl中添加一项的时候,AddItem检查CommandPool中是否已经存在该Command.如果没有,这个Command被created,并被加入CommandPool,这个Command的使用计数被置为1.如果这个Command已经存在,它将被重用,使用计数加1.

注意ESRI.ArcGIS.Controls内置的Controls. 像ControlsMapZoomInFixedCommandClass这种以CommandClass结尾的一般是实现了ICommand接口. 这个Command会持久地与MapControl交互就需要ITool接口,像ControlsMapZoomInToolClass这种以ToolClass结尾的都是实现了ITool的类.ControlsFeatureSelectionToolbarClass这种实现了IToolBarDef接口的.  实现了不同接口的类在使用时也有所不同:

ICommand command = new ControlsOpenDocCommandClass();command.OnCreate(m_mapControl.Object);command.OnClick();

ICommand pCommand = new ESRI.ArcGIS.Controls.ControlsMapZoomInToolClass();pCommand.OnCreate(axMapControl1.Object);axMapControl1.CurrentTool = pCommand as ITool;

 

ArcEngine中你可以选择如何使用工具条:

1.使用ArcEngine的ToolbarControl,利用Add函数添加现有的Command Controls.

2.使用ArcEngine的ToolbarControl,利用Add函数添加自己实现的Command Controls.当然继承自ICommand或者ITool(或者BaseCommand或 BaseTool抽象类)

3.实现IToolBarDef 接口创建定制的工具条(Tool Bar)

4.在按钮,菜单项或者一般的toolbar中使用ControlsXXXXXXClass

<以上为纯属个人理解,如有错误,请留言,谢谢>

ArcEngine的ToolbarControl解析相关推荐

  1. ArcEngine + DevPress GIS二次开发:湖北疫情交互式数据分析、地图输出、专题可视化系统 具体实现

    代码github地址: https://github.com/yunwei37/COVID-19-ArcEngine 实现效果 具体实现效果可参照我的前一篇文章: https://blog.csdn. ...

  2. arcengine遍历属性表_Redis源码解析四--跳跃表

    Redis 跳跃表(skiplist) 1. 跳跃表(skiplist)介绍 定义:跳跃表是一个有序链表,其中每个节点包含不定数量的链接,节点中的第i个链接构成的单向链表跳过含有少于i个链接的节点. ...

  3. ArcEngine一些代码实现(转载)

    转自:http://xitong.iteye.com/blog/1715759 ArcEngine 一些实现代码 ●·● 目录: A1 ----实现:鼠标滑过显示要素 tip A2 ----实现:通过 ...

  4. ArcEngine 入门教程-控件初体验

    缘起 个人总结梳理,顺便练练文笔,For me and for you like me! 目标 我一直很认同古人所说的君子性非异也,善假于物也,本文主要目的是告诉读者如何使用帮助来学习了解ArcEng ...

  5. ArcEngine添加注记

    ArcEngine添加注记 标注和注记是ArcEngine中提供的两种使用文字信息标注地图要素的方式.其中标注是作为图层的属性存在的,可以动态创建,注记作为地理要素被存储.需要注意的是Shp文件不支持 ...

  6. ArcGis二次开发ArcEngine开篇

    ArcGis二次开发ArcEngine开篇 以一款简单GIS软件截图片引入本篇内容 导读 万事开头难,如何利用ArcEngine开发一款GIS产品呢?一款简单的GIS软件基本布局如上图所示,共划分为六 ...

  7. ArcEngine C# GIS开发入门作业 (三)Ex04——实现地图的简单渲染和唯一值渲染

    文章评论 写评论 sinat_37432938: 可以说非常有参考的意义,谢谢分享 4周前 #2楼 举报回复查看回复(1) domen_dragon 回复 sinat_37432938: 哈哈,谢谢夸 ...

  8. ArcEngine 一些实现代码

    转自原文 ArcEngine 一些实现代码 ●·● 目录: A1 ----实现:鼠标滑过显示要素 tip A2 ----实现:通过鼠标选择要素并高亮显示(ISelectionEnvironment) ...

  9. ArcEngine 一些实现代码(转载)

    [030]◀▶ ArcEngine 一些实现代码 --------------------------------------------------------------------------- ...

最新文章

  1. Windows Server 2008十大新功能
  2. DRF url控制 解析器 响应器 版本控制 分页(常规分页,偏移分页,cursor游标分页)...
  3. 基于JAVA+Servlet+JSP+MYSQL的毕业生去向管理系统
  4. 参加平安的笔试+喜欢古天乐的坚持+想拍自己的电影+人生的无奈
  5. Javascript找出所有没有重复的字符(优化)
  6. useradd和adduser的区别
  7. BCD码干什么用的?
  8. ionic 刷新页面的几种方法
  9. 李瑾博士:信誉的建立是否“不计成本”?
  10. 用python实现计算器功能_Python实现的计算器功能示例
  11. LOAP its implimenlation
  12. AI算力基础 -- TPU1.0
  13. 二十余岁时的社会观(三)
  14. HBuilder 云打包生成 .apk 文件所需的安卓证书如何获取以及文件打包前必须的设置...
  15. 百度网盘简易下载工具介绍
  16. C# XtraReport学习之三 绑定数据
  17. php实现pdhf2加密,搞了一天半了,可恶的加密代码解决方案
  18. 微信小程序——API promise化,全局数据共享,MobX,将Stroe中的成员绑定到页面中,在页面上使用Strore中的成员
  19. 各国商圈json数据及mysql文件
  20. 【修真院java小课堂】ArrayList浅析

热门文章

  1. Windows 2008
  2. “怀才不遇”与“怀才不孕”怎么办?
  3. CSS text-transform 属性
  4. Swift 中使用 SQLite——新增数据
  5. 浅谈Disruptor
  6. 解决:无法创建该DNS 服务器的委派
  7. java.lang.IllegalMonitorStateException 异常出现原因
  8. 「hadoop」hadoop启动需要相关的命令(仅供本人使用)
  9. Cento7+Nginx 之 URL重写
  10. 一次HP 阵列卡排障