zoukankan      html  css  js  c++  java
  • 向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控件
     
     
  • 相关阅读:
    [转]ThinkCMF框架任意内容包含漏洞分析复现
    nodejs环境安装
    ffmpeg+nginx-rtmp-module
    activemq安装
    mysql审计插件
    sql优化工具SQLAdvisor的安装
    Harbor安装(docker-compose) -- 企业级Registry仓库
    在CentOS上部署kubernetes1.9.0集群
    3-基础概念(数据模型、时序 4 种类型、作业和实例)
    1-什么是 Prometheus
  • 原文地址:https://www.cnblogs.com/mymhj/p/2721036.html
Copyright © 2011-2022 走看看