ArcEngine中的ICommand接口和ITool接口

一、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接口混合为一个接口也是合适的,这样设计对插件的产生没有影响。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值