转自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 UID
UID uID = new UIDClass();
uID.Value = "esriControls.ControlsMapFullExtentCommand";
axToolbarControl1.AddItem(uID,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly); //Adding a command by ProgID
string progID = "esriControls.ControlsMapFullExtentCommand";
axToolbarControl1.AddItem(progID,-1,-1,false,0,esriCommandStyles.esriCommandStyleIconOnly); //Adding a command by ICommand
ICommand 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

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

最新文章

  1. [Erlang 0114] Erlang Resources 小站 2013年7月~12月资讯合集
  2. [ActiveMQ]初识ActiveMQ
  3. JavaScript必须了解的知识点总结。
  4. 关于UGUI Image Sliced模式的一个BUG。
  5. Win10如何设置防火墙开放特定端口 windows10防火墙设置对特定端口开放的方法
  6. Linux 批量改名之 rename 命令
  7. MEF load plugin from directory
  8. display:inline-block兼容ie6/7的写法
  9. WM_INITDIALOG与WM_CREATE消息的区别
  10. BZOJ 3677 连珠线
  11. QQ好友在线/离线,怎么测试?
  12. 常用Java API(转)
  13. Vagrant安装完lnmp后,配置linux和windows共享文件并配置虚拟主机访问项目
  14. C++ Primer 有感(重载操作符)
  15. MySQL查看表占用空间大小
  16. redis 持久化文章分析的很到位
  17. javascript小实例,移动端页面中的拖拽
  18. MongoDB之 的Rollback讲解及避免
  19. 廖雪峰Java5集合-2List-1使用List
  20. POJ - 2115C Looooops 扩展欧几里得(做的少了无法一眼看出)

热门文章

  1. h5语音播放(移动端)
  2. BZOJ 3629 约数和定理+搜索
  3. 是时候抛弃web.xml了?
  4. Scrapy 框架介绍
  5. 【Codeforces Round #459 (Div. 2) B】 Radio Station
  6. WPF和WinForm的区别, 数据驱动与事件驱动的优势对比
  7. [Python] isinstance() for checking object type
  8. 位运算(&amp;amp;、|、^)与逻辑运算(&amp;amp;&amp;amp;、 ||)差别
  9. 认识 Atlassian Datacenter 产品
  10. Linq聚合函数使用