向ArcGIS的ToolBarControl中添加任意的windows组建的方法[转]
Link: http://www.cnblogs.com/mymhj/archive/2012/10/12/2721036.html
概要:在使用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控件
? ?