zoukankan      html  css  js  c++  java
  • ArcEngine的ToolbarControl解析

    转自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

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

  • 相关阅读:
    poi 导出Excel
    数据库连接太慢问题(3层for)
    mybatis 结果 返回的类中有集合的字段List<String>
    tomcat8 插件
    tomcat 7 到tomcat8 乱码问题
    简易代码生成器
    shiro权限控制用户登录的用法介绍
    导入maven工程并配置maven环境
    angularjs工程流程走不通的原因以及使用angularjs流程注意点
    访问路径:https://i.cnblogs.com/posts?categoryid=925678
  • 原文地址:https://www.cnblogs.com/arxive/p/6704446.html
Copyright © 2011-2022 走看看