发布时间 : 星期五 文章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;