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


    ArcGISToolBarControl中添加任意的windows组建的方法[]

    Link: http://www.cnblogs.com/mymhj/archive/2012/10/12/2721036.html

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

    具体实现:

      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控件

       

    实例代码

  • 相关阅读:
    安装的时候,突然安装程序关闭,的灵异问题。
    CSAPP阅读笔记(1)-序
    CSAPP阅读笔记(2)-虚存管理
    nafxcwd.lib(afxmem.obj) :error LNK2005:"void * __cdecl operator new(unsigned int)"
    Linux内核源代码情景分析读书笔记(5)-关于fork/clone/vfork
    [转]调试经验总结VC下的错误对话框
    IP数据包首部的校验和算法
    Matlab画图及生成exe文件
    VC++6.0中的new
    Linux内核模块编译、加载&卸载及查看运行结果
  • 原文地址:https://www.cnblogs.com/xiexiaokui/p/3915405.html
Copyright © 2020-2023  润新知