ArcEngine之ToolbarControl控件

ToolbarControl是一个装载地图操作命令和工具的控件,该类内部维护一个CommandPool命令池,在这个命令池中存放着所有已经添加的Command对象,获取其中的Command可以通过CommandPool的get_Command方法,通过比较Command的名称,可以得到想要的Command对象。

也就是说,ToobarControl是一个工具箱,里面装有大量的工具用于操作地图,例如文件打开、缩放、移动、测量等等。在ArcEngine中这些工具就是一个个的Command对象。

ToolbarControl控件

ToolbarControl控件在设计界面如上图所示,准确来说,它是一个容纳各种地图操作命令和工具的容器,里面带有一些常用的工具,这些工具包括两种,一种是命令,一种工具,命令是一次性指令(保存、打开等),而工具则提供一个交互交互操作,需要用户进行二次操作(放大缩小、选择等),同时空间也支持支持自定义工具。

在ArcEngine中有两种方法配置toolbarcontrol:

1.控件属性配置

可以通过右键—属性,来对其属性进行配置,属性界面如下:

  • General是通用属性,可以通过其设置整个空间的边框、显示效果、鼠标样式和源,此外其bBuddy是一个重要的属性,它指定了toolbarcontrol的控制主体,即工具和命令作用的对象。如果没有绑定MapControl,则控件上的工具将处于未不可用状态(呈灰色),如图:

此外,下面的Enabled属性如果没有勾选,也会出现同样的情况。

  • Item是管理控件内部工具的选项,可以添加自带的工具,通过add选项添加对应的工具和命令,如下图所示:

通过,拖动选择排列顺序,通过右键删除工具。

  • Color用于设置toolbarcontrol工具栏背景的颜色,这里不详述。

2.代码配置

通过代码配置,向toolbarcontrol控件里面添加工具。上文说过,toolbarcontrol里面有一个CommandPool池,所以添加工具,其实就是添加一个个的command对象。而上文也说过,toolbarcontrol的item包括工具和命令,添加这两种对象的代码有所不同。其中工具类型的Command,一般以tool或是toolClass结尾;而命令类型的Command,一般以CommandClass结尾,具体可见:

https://wenku.baidu.com/view/261e41224b73f242336c5f68.html

下面是向toolbarcontrol控件添加item的代码:

 ICommand command = new ControlsMapFullExtentCommandClass();
 axToolbarControl1.AddItem(command, -1, -1, false, 0, esriCommandStyles.esriCommandStyleIconOnly);

同时,我们也可以通过代码实现方法一中的各类设置,比如设置toobarcontrol的enabled属性为true,就是相当于配置界面中,enabeled选项打钩。

除了添加ArcEngine自带的command外,还可以自定义command,具体可参考:https://blog.csdn.net/zhumingquanqq/article/details/73549806

最后有个提醒:

toolbarcontrol空间里面的item很多,有很多看起来很相似,主要集中在scene和map navigation两个上面,记得要区分开。

  • 4
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ArcEngine二次开发中,可以通过以下步骤在界面底部添加状态栏,并实时显示鼠标位置的地理空间坐标信息: 1. 在界面底部添加一个状态栏控件,可以使用Windows Forms中的StatusStrip控件。 2. 在鼠标移动事件中获取鼠标的坐标信息,可以使用ArcEngine中的IPoint接口的X属性和Y属性获取。 3. 将获取到的鼠标坐标信息转换为地理空间坐标信息,可以使用ArcEngine中的ISpatialReference接口和IProjectedCoordinateSystem接口进行转换。 4. 在状态栏中实时显示地理空间坐标信息。 以下是示例代码: ```csharp private IToolbarControl m_toolbarControl; private IMapControl3 m_mapControl; private IStatusBar m_statusBar; private IPoint m_mousePoint; private void MainForm_Load(object sender, EventArgs e) { // 初始化工具栏控件和地图控件 m_toolbarControl.SetBuddyControl(m_mapControl); m_mapControl.OnMouseMove += MapControl_OnMouseMove; // 初始化状态栏控件 m_statusBar = new StatusBar(); Controls.Add(m_statusBar); m_statusBar.SizingGrip = false; m_statusBar.Dock = DockStyle.Bottom; } private void MapControl_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) { m_mousePoint = new PointClass() { X = e.mapX, Y = e.mapY }; m_mapControl.Map.DisplayTransformation.FromMapPoint(m_mousePoint, out m_mousePoint); // 这里假设地图使用的是WGS84投影坐标系 ISpatialReferenceFactory srFactory = new SpatialReferenceEnvironmentClass(); IProjectedCoordinateSystem pcs = srFactory.CreateProjectedCoordinateSystem((int)esriSRProjCS4Type.esriSRProjCS_WGS1984WebMercatorMajorAuxiliarySphere); m_mousePoint.Project(pcs); m_statusBar.Panels[0].Text = string.Format("经度:{0:f6} 纬度:{1:f6}", m_mousePoint.X, m_mousePoint.Y); } ``` 这个例子用到了IToolbarControl接口、IMapControl3接口、IStatusBar接口、IPoint接口、ISpatialReferenceFactory接口、IProjectedCoordinateSystem接口等,它们是ArcEngine中常用的接口。在这个例子中,我们获取鼠标移动事件中的坐标信息,并将其转换为地理空间坐标信息,最后在状态栏中实时显示。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值