ArcGIS Engine二次开发 - 基础篇 联系客服

发布时间 : 星期五 文章ArcGIS Engine二次开发 - 基础篇更新完毕开始阅读c1826921192e45361066f5ac

ArcGIS Engine二次开发——基础篇

制作好的工具栏如下图所示:

图 21制作好的工具栏

1.7.3.3 添加状态栏

向窗体中添加一个状态栏(StatusStrip),点击状态栏属性表中Items项右侧的按钮,弹出如下对话框:

图 22状态栏的项集合编辑器

向其中添加3个StatusLabel,属性设置如下:

表 4 状态栏属性设置

名称(Name) StatusBlank StatusScale 1.7.3.4 添加控件

Text属性 比例尺 Spring属性 True False False 描述 留作空白 显示当前视图的比例尺 显示当前坐标信息 StatusCoordinate 当前坐标 在工具栏中找到SpliterContainer控件,,在MainForm窗体中

添加两个。第一个用于分隔图层视图(TOCControl)和地图信息,采用默认布局“竖直”左侧为Panel1,右侧为Panel2。第二个SpliterContainer添加到第一个的Panel2中,用于分隔地图视图(MapControl)和地图属性信息,采用“水平拆分器方向”得到的默认布局为竖直布局,,如下图所示:

ArcGIS Engine二次开发——基础篇

图 48添加好SpliterContainer控件后的窗体布局

在第二个SpliterContainer的Panel1中添加一个MapControl控件和LicenseControl控件。找到MapControl控件中的Dock属性,点击其中的正方形,将Dock属性设置为Fill,如下图所示:

图 49 MapControl的Dock属性

向第一个SpliterContainer的Panel1中添加一个TOCControl控件,将其Dock属性设为Fill,将其Buddy属性设为当前的axMapControl1,如下图所示。

ArcGIS Engine二次开发——基础篇

图 23伙伴控件设置

向第二个SpliterContainer的Panel2中添加DataGridView控件,并将其Dock属性设为Fill。用于显示空间查询得到要素的属性信息。

制作好的界面如下图所示:

图 24制作好的程序界面布局

ArcGIS Engine二次开发——基础篇

1.7.4 实现工具类

在这里,我们将自己动手实现放大,缩小,居中放大,居中缩小,漫游和全图显示六个工具类,与上一小结介绍的方法类似,我们这里以“漫游”为例介绍实现的过程,其他类的实现请大家参照前面小结的方法以及示例程序自己完成。

将鼠标移动到解决方案资源管理器,鼠标右键点击Classes文件夹,再点击弹出菜单的“添加”——“新建项”,选择ArcGIS项中的Base Tool,将名字更改为Pan.cs,添加即可。之后在解决方案资源管理器找到Pan.bmp和Pan.cur,其中Pan.bmp是该工具在系统界面上显示的图标样式,Pan.cur是鼠标进行地图操作时的鼠标样式,这里我们的图标样式使用ArcEngine已经封装的图标,将这两个图标删除。

之后我们点击Pan.cs,如下图,对m_caption 、m_toolTip 、m_message和m_name做相应修改。代码如下。

base.m_category = \; base.m_caption = \漫游\; base.m_message = \漫游\; base.m_toolTip = \漫游\;

base.m_name = \;

添加如下引用:

using ESRI.ArcGIS.Geometry; using ESRI.ArcGIS.Carto; using ESRI.ArcGIS.Display;

添加两个成员变量:

//获取视图范围

private IScreenDisplay m_focusScreenDisplay=null; //标记操作进程

private bool m_PanOperation;

向其中的OnMouseDown函数添加如下代码:

//判断是否鼠标左键 if (Button != 1) return;

//获取视图范围并开始漫游

IActiveView pActiveView = m_hookHelper.ActiveView; m_focusScreenDisplay = pActiveView.ScreenDisplay;

IPoint pPoint = pActiveView.ScreenDisplay.DisplayTransformation.ToMapPoint(X,Y); m_focusScreenDisplay.PanStart(pPoint); //标记漫游操作为真 m_PanOperation = true;