標籤:style blog http color 使用 io strong for
向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控制項
??
4?執行個體代碼