ArcEngine中的ICommand接口和ITool接口

来源:互联网 发布:weui 开发案例 源码 编辑:程序博客网 时间:2024/06/06 01:01

一、ICommand接口

ICommand接口为一个命令型接口,特点是当“命令按钮”按下时,会直接执行一段已经编写好的代码而无需外界交互,过程类似“宏”操作。

主要函数以及含义如下:

        #region ICommand        /// <summary>        /// 命令按钮的图标(获取程序集文件中一个按钮图标文件的资源号)        /// </summary>        public int Bitmap        { get; }        /// <summary>        /// 命令按钮的文字        /// </summary>        public string Caption        { get; }        /// <summary>        /// 命令按钮所属类别        /// </summary>        public string Category        { get; }        /// <summary>        /// 命令按钮是否被选择        /// </summary>        public bool Checked        { get; }        /// <summary>        /// 命令按钮是否可用        /// </summary>        public bool Enabled        { get; }        /// <summary>        /// 快捷帮助ID        /// </summary>        public int HelpContextID        { get; }        /// <summary>        /// 帮助文件路径        /// </summary>        public string HelpFile        { get; }        /// <summary>        /// 鼠标移动到按钮上是时状态栏出现的文字        /// </summary>        public string Message        { get; }        /// <summary>        /// 按钮名称        /// </summary>        public string Name        { get; }        /// <summary>        /// 按钮点击时触发的方法        /// </summary>        public void OnClick()        {                   }        /// <summary>        /// 按钮产生时触发的方法         /// </summary>        /// <param name="Hook"></param>        public void OnCreate(object Hook)        {                    }        /// <summary>        /// 鼠标移动到按钮上时弹出的文字        /// </summary>        public string Tooltip        { get; }        #endregion

二、ITool接口

实现了ITool接口的插件对象在UI层上表现为一个工具按钮,工具按钮与命令按钮相似,其区别是前者点击后是开启一个交互过程而后者直接开始执行功能。
ArcMap中的“地图放大”工具就是一个Tool,按下该工具后,用户需要在地图上点击或拖放鼠标以显示更小范围的地图视图。

ArcMap中要产生一个Tool对象需要同时实现ICommand和ITool两个接口,其中ICommand定义启动Tool交互过程的方法,ITool接口则定义人机交互操作时需要的所有方法。

主要函数及其含义如下:

        #region ITool        /// <summary>        /// 鼠标在地图上的样式        /// </summary>        public int Cursor        { get; }        /// <summary>        /// Tool的激活状态设置        /// </summary>        /// <returns></returns>        public bool Deactivate()        {  }        /// <summary>        /// 鼠标点击右键弹出快捷菜单时触发的事件        /// </summary>        /// <param name="x"></param>        /// <param name="y"></param>        /// <returns></returns>        public bool OnContextMenu(int x, int y)        {  }        /// <summary>        /// 键盘某个按键点击时触发的事件        /// </summary>        /// <param name="keyCode"></param>        /// <param name="shift"></param>        public void OnKeyDown(int keyCode, int shift)        { }        /// <summary>        /// 键盘某个按键点击后弹起时触发的事件        /// </summary>        /// <param name="keyCode"></param>        /// <param name="shift"></param>        public void OnKeyUp(int keyCode, int shift)        { }        /// <summary>        /// 鼠标点击地图时触发的事件        /// </summary>        /// <param name="button"></param>        /// <param name="shift"></param>        /// <param name="x"></param>        /// <param name="y"></param>        public void OnMouseDown(int button, int shift, int x, int y)        {                   }        /// <summary>        /// 鼠标在地图上移动时触发的事件        /// </summary>        /// <param name="button"></param>        /// <param name="shift"></param>        /// <param name="x"></param>        /// <param name="y"></param>        public void OnMouseMove(int button, int shift, int x, int y)        {        }        /// <summary>        /// 鼠标双击地图时触发的事件        /// </summary>        public void OnDblClick()        {        }        /// <summary>        /// 鼠标在地图上弹起时触发的事件        /// </summary>        /// <param name="button"></param>        /// <param name="shift"></param>        /// <param name="x"></param>        /// <param name="y"></param>        public void OnMouseUp(int button, int shift, int x, int y)        { }        /// <summary>        /// 地图刷新时触发的事件        /// </summary>        /// <param name="hdc"></param>        public void Refresh(int hdc)        { }        #endregion

在ArcGIS Engine中如果把ICommand接口和ITool接口混合为一个接口也是合适的,这样设计对插件的产生没有影响。