添加且显示以下信息: ? 当前所用工具信息 ? 当前比例尺 ? 当前坐标
1、添加状态栏项目
在设计视图中,点击窗体中的状态栏,在其属性面板中找到“Items”项,单击其右边的按钮,在下拉框中选择“StatusLabel”,单击“添加按钮”,依次添加四个StatusLabel,依次修改属性参数如下表所示: 序号 1 2 3 4 Name属性 MessageLabel Blank ScaleLabel Text属性 就绪 比例尺 Spring属性 False True False False 说明 当前所用工具信息 占位 当前比例尺 当前坐标 CoordinateLabel 当前坐标 设置好之后如下图所示:
Tips: 我们设计出的状态栏最终如下所示: 就绪 (Blank) 比例尺 当前坐标 Spring属性表示可以按状态栏剩余空间自动伸缩。所以加入Blank项目,只是为了占个位子,以达到ScaleLabel和CoordinateLabel项目右对齐而MessageLabel项目左对齐的目的。
2、显示当前所用工具信息
首先添加axToolbarControl1的OnMouseMove事件。在其事件响应函数代码如下: private void axToolbarControl1_OnMouseMove(object sender, IToolbarControlEvents_OnMouseMoveEvent e)
{
//取得鼠标所在工具的索引号
int index = axToolbarControl1.HitTest(e.x, e.y, false); if (index != -1) {
//取得鼠标所在工具的ToolbarItem
IToolbarItem toolbarItem = axToolbarControl1.GetItem(index); //设置状态栏信息
MessageLabel.Text = toolbarItem.Command.Message; } else {
MessageLabel.Text = \就绪\ } }
3、显示当前比例尺
添加axMapControl1的OnMouseMove事件,其代码如下: private void axMapControl1_OnMouseMove(object sender, IMapControlEvents2_OnMouseMoveEvent e) {
//显示当前比例尺
ScaleLabel.Text = \比例尺1:\ }
4、显示当前坐标
显示当前坐标也是axMapControl1的OnMouseMove事件中响应,故只要在axMapControl1_OnMouseMove函数中添加如下代码即可: //显示当前坐标
CoordinateLabel.Text = \当前坐标X = \+ \ 按F5编译运行,可以看到,我们的程序已经能够正常工作了。但是细心的你可能会发现,当前坐标的后面的坐标单位为“esriUnknownUnits”或“esriMeters”之类,即系统在正常单位的前面加上了“esri”,追求完美的我们自然看得不舒服。那就进行简单的替换吧。 首先定义个全局坐标单位变量sMapUnits,如下所示: private string sMapUnits; 再Form1_Load函数中进行初始化: sMapUnits = \
添加axMapControl1控件的OnMapReplaced事件,在事件响应函数中进行坐标单位替换,代码如下: private void axMapControl1_OnMapReplaced(object sender,
IMapControlEvents2_OnMapReplacedEvent e) {
esriUnits mapUnits = axMapControl1.MapUnits;
switch (mapUnits) {
case esriUnits.esriCentimeters: sMapUnits = \ break;
case esriUnits.esriDecimalDegrees: sMapUnits = \ break;
case esriUnits.esriDecimeters: sMapUnits = \ break;
case esriUnits.esriFeet: sMapUnits = \ break;
case esriUnits.esriInches: sMapUnits = \ break;
case esriUnits.esriKilometers: sMapUnits = \ break;
case esriUnits.esriMeters: sMapUnits = \ break;
case esriUnits.esriMiles: sMapUnits = \ break;
case esriUnits.esriMillimeters: sMapUnits = \ break;
case esriUnits.esriNauticalMiles: sMapUnits = \ break;
case esriUnits.esriPoints: sMapUnits = \ break;
case esriUnits.esriUnknownUnits: sMapUnits = \ break;
case esriUnits.esriYards: sMapUnits = \
break; } }
5、编译运行
按F5编译运行程序。如果你足够细心的话,相信你已经成功了!
在本讲中,介绍中StatusStrip控件的基本使用方法和AE中当所用工具信息、当前比例尺和当前坐标的显示调用方法。
第五讲 鹰眼的实现
在上一讲中,我们实现了状态栏的相关信息显示,在这一讲中我们将要实现鹰眼功能。 所谓的鹰眼,就是一个缩略地图,上面有一个矩形框,矩形框区域就是当前显示的地图区域,拖动矩形框可以改变当前地图显示的位置,改变矩形框的大小,可以改变当前地图的显示区域大小,从起到导航的作用。鹰眼是地图浏览中常用的功能之一。
关于鹰眼的实现方式,最常用的是用一个MapControl控件显示地图全图,并在上面画一个红色矩形框表示当前地图的显示范围,并实现鹰眼MapControl与主窗体的MapControl互动。本讲最终效果如下所示:
图1 鹰眼效果
1、添加鹰眼控件
由于本教程在第一讲中没有预先考虑到鹰眼所放的位置,故我们要先稍微调整一下程序框架,并添加一个MapControl用于显示鹰眼。
在本教程中,我们将鹰眼放在图层控件的下方,调整方法如下:
(1)在设计视图中,选择tabControl1控件,即放图层和属性的那个容器,将其Dock属性设为None,并用鼠标拖拽将其缩小。把工具箱中的SplitContainer控件拖到窗体的左窗格,即放在tabControl1控件的旁边。并将其Orientation属性设置为Horizontal。
(2)选中tabControl1控件,按Ctrl+X剪切,再选中刚才粘贴到SplitContainer2的Panel1中,如图2所示。操作完成后效果如图3所示。
图2