向ArcGIS的ToolBarControl中添加任意的windows组建的方法[转]
向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控件
向ArcGIS的ToolBarControl中添加任意的windows组建的方法[转]的更多相关文章
- 向ArcGIS的ToolBarControl中添加任意的windows控件的方法
概要:在使用ArcEngine开发中,给ToolbarControl添加按钮形式的命令项相信大家都很熟悉了,因为网上的例子很多.但这种使用click调用功能的方式只能满足大部分用户在体验方面的需求,除 ...
- JabRef中添加中文文献出现乱码 解决方法
JabRef中添加中文文献出现乱码 解决方法 问题描述 JaBRef是一款开源的文献管理软件,主要用来管理bibtex格式的参考文献,可以与LATEX配合使用,方便论文参考文献的使用.文献管理 ...
- element-ui 的el-button组件中添加自定义颜色和图标的实现方法
这篇文章主要介绍了element-ui 的el-button组件中添加自定义颜色和图标的实现方法,目前的解决方案是:添加一个自定义全局指令,同时在element-ui源码中,加入对应的组件.需要的朋友 ...
- ArcGIS pro2.3中添加天地图底图
应用背景: 很多时候,我们需要使用网络上的遥感影像或者百度地图.天地图等在线地图做一些矢量化工作或者其他. 笔者见过很多人都是把百度地图截图,然后把图片导如Arcmap或者Arcgis pro中,然后 ...
- 在ubuntu中添加widows启动项的简单方法
打开终端执行: sudo vim /boot/grub/grub.cfg 或者 sudo gedit /boot/grub/grub.cfg 打开文件grub.cfg. 在文件中添加:添加的时候注意和 ...
- ZH奶酪:PHP中添加HTML代码的三种方法
php中添加HTML代码,就是php类型的文件中添加html代码~ 第一种是在HTML中加PHP. 大段大段的html代码中,在各个需要执行php的地方<?php .... ?> 比如 l ...
- 如何在VS2010中添加ActiveX控件及使用方法
方法1: 1.首先在在项目上面右击添加类,如下图所示: 2.点击添加ActiveX控件中的MFC类 3.找到需要添加的ActiveX类. 4.点击完成即可. 5.此时转到资源视图,打开如下视图.可能工 ...
- linux 中添加自己的库路径的方法 cannot open shared object file: No such file or directory
本文转自:http://blog.csdn.net/maotianwang/article/details/44619197 库文档在连接(静态库和共享库)和运行(仅限于使用共享库的程式)时被使用,其 ...
- Android中添加监听回调接口的方法
在Android中,我们经常会添加一些监听回调的接口供别的类来回调,比如自定义一个PopupWindow,需要让new这个PopupWindow的Activity来监听PopupWindow中的一些组 ...
随机推荐
- 001——数组(一)数组知识及foreach函数应用
<?php /**数组(一)数组知识及foreach函数应用*/ /*数组:在一个变量中,存储一个或多个值,每一个元素都有一个访问ID * * */ /* * //索引型数组 $arr=arra ...
- 蓝桥杯练习系统历届试题 剪格子 dfs
问题描述 如下图所示,3 x 3 的格子中填写了一些整数. +--*--+--+|10* 1|52|+--****--+|20|30* 1|*******--+| 1| 2| 3|+--+--+--+ ...
- Java Web编程的主要组件技术——Hibernate核心组件
参考书籍:<J2EE开源编程精要15讲> Hibernate配置文件 1) hibernate.cfg.xml <?xml version='1.0' encoding='UTF-8 ...
- Faces人脸识别项目简介
Faces人脸识别 分为两个模块,Faces文件夹下存放人脸识别算法的代码,Web文件夹下存放网站搭建的代码 详情请查看各个模块下的readme文档 项目简介 核心算法 一款基于Dlib.opencv ...
- 【linux】查看进程
查询所有:ps aux 查询某个用户:ps -u abc 终止某个进程:kill
- .properties文件常量定义
application.properties文件,位于resources目录下.一般定义一些不会改变的数据如数据库相关配置,文件路径,项目地址. 如何在项目代码中获取该文件中的配置信息: 1,在app ...
- C++的explicit关键字
C++程序员对于explicit这个关键字其实不是很熟悉,至少我是如此:原因在于其使用范围不大,而且作用也没有那么大. 但是这不是说明我们的程序中不需要这个关键字,按Google的C++编程规范和Ef ...
- 在Android中来修改SQL里面的权限和显示内容
1.在Android中建立了一个数据库. 然后要知道存储数据库的路劲.得到路劲然后进入cmd里面进到 手机终端. 2.利用splite3来显示数据库里面的东西. 3.利用chmod来修改数据库文件的权 ...
- HDU1501 dfs
像这样有维度的一定要记忆化啊........... #include<cstdio> #include<cstdlib> #include<iostream> #i ...
- INET_ADDRSTRLEN 和 INET6_ADDRSTRLEN 长度
在<netinet/in.h>中有这两个宏的定义 #define INET_ADDRSTRLEN 16 #define INET6_ADDRSTRLEN 46 INET_ADDRSTRLE ...