• 向ArcGIS的ToolBarControl中添加任意的windows组建的方法


    概要:在使用ArcEngine开发中,给ToolbarControl添加按钮形式的命令项相信大家都很熟悉了,因为网上的例子很多。但这种使用click调用功能的方式只能满足大部分用户在体验方面的需求,除此之外用户很可能要求你在工具条中增加类似文本框,单选框、选择面板,combobox等windows控件,今天有个同事问我这个问题就在这里做一个实例。供大家参考。

    具体实现:

      1 知识整备

     (1 )其实要实现这个效果很简单,只要大家了解Arcgis中的IToolControl接口的使用方法,就不难实现。

       IToolControl 这个接口有只有简单的三个方法:

     
    hwnd:是个只读属性,用于给调用者返回控件 句柄。
    OnDrop:是一个方法,用于调用者验证当前控件是否可拖动。
    OnFocus:是一个方法,用于调用通知当前项,你已经聚焦。
    (2)除了了解IToolCotrol接口之外,大家还必须具备知道如何创建Arcgis 命令插件的知识,以及如何调用插件的方法。
     
    2 实现
       以一个简单Combobox为例:
        public sealed class Command1 : BaseCommand, IToolControl
        {
     

            private int _handle = 0;
            private ICompletionNotify _CompNotify;
            private System.Windows.Forms.ComboBox comboBox = new System.Windows.Forms.ComboBox();
            private IHookHelper m_hookHelper = null;
            public Command1()
            {
                this._handle = comboBox.Handle.ToInt32();
                comboBox.Items.Add("大家好才是真的好1");
                comboBox.Items.Add("大家好才是真的好1");
                comboBox.Items.Add("大家好才是真的好1");
            }

            #region Overriden Class Methods

            /// <summary>
            /// Occurs when this command is created
            /// </summary>
            /// <param name="hook">Instance of the application</param>
            public override void OnCreate(object hook)
            {
                if (hook == null)
                    return;

                try
                {
                    m_hookHelper = new HookHelperClass();
                    m_hookHelper.Hook = hook;
                    if (m_hookHelper.ActiveView == null)
                        m_hookHelper = null;
                }
                catch
                {
                    m_hookHelper = null;
                }

                if (m_hookHelper == null)
                    base.m_enabled = false;
                else
                    base.m_enabled = true;

                // TODO:  Add other initialization code
            }

            /// <summary>
            /// Occurs when this command is clicked
            /// </summary>
            public override void OnClick()
            {
                // TODO: Add Command1.OnClick implementation
            }

            #endregion

            #region IToolControl 成员

            public bool OnDrop(esriCmdBarType barType)
            {
                if (barType == esriCmdBarType.esriCmdBarTypeToolbar)
                {
                    return true;
                }
                else return false;
            }

            public void OnFocus(ICompletionNotify complete)
            {
                _CompNotify = complete;
            }

            public int hWnd
            {
                get
                {
                    return _handle;
                }
            }

            #endregion
        }

    3 实现效果
    照着这个实例可以添加,其它的windows控件
     
     
  • 相关阅读:
    IE的F12开发人员工具不显示问题
    CENTOS 6.5 平台离线编译安装 PHP5.6.6
    PHP 5.6 编译安装选项说明
    CENTOS 6.5 平台离线编译安装 Mysql5.6.22
    CENTOS 6.5 平台离线安装 Apache2.4
    Bringing Whoops Back to Laravel 5
    在 Laravel 中使用图片处理库 Integration/Image
    让 windows 下的命令行程序 cmd.exe 用起来更顺手
    Laravel Composer and ServiceProvider
    VisualStudio2013 如何打开之前版本开发的(.vdproj )安装项目
  • 原文地址:https://www.cnblogs.com/mymhj/p/2721036.html
Copyright © 2020-2023  润新知