Arcgis Engine 中状态栏的添加
一、添加控件
状态栏用于显示当前程序的活动状态,一般在程序的底部,控件名为StatusStrip。添加完控件以后,在控件属性中选择Item项中的添加StatusLabel,分别为:MessageLabel、Blank、ScaleLabel、coordinateLabel。分别代表含义如下:
序号 | Name 属性 | Text 属性 | Spring 属性 | 说明 |
1 | MessageLabel | 就绪 | False | 当前所用工具信息 |
2 | Blank | True | 占位 | |
3 | ScaleLabel | 比例尺 | False | 当前比例尺 |
4 | CoordinateLabel | 当前坐标 | False | 当前坐标 |
注:Blank是一个空白的标签,用于占一个位置来调整4个标签之间的间距。Spring 属性表示可以按状态栏剩余空间自动伸缩。
添加StatusLabel,如图1。
图1(a)
图1(b)
图1(c)
二、添加处理函数
1、ToolBarControl鼠标滑动响应函数
private void axToolbarControl1_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IToolbarControlEvents_OnMouseMoveEvent e)
{
int index = axToolbarControl1.HitTest(e.x, e.y, false); //
if (index != -1)
{
ESRI.ArcGIS.Controls.IToolbarItem toolBarItem = axToolbarControl1.GetItem(index);
MessageLabel.Text = toolBarItem.Command.Message;
}
else
{
MessageLabel.Text = "就绪";
}
}
2、mapControl鼠标滑动响应函数
private void mainMapControl_OnMouseMove(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMouseMoveEvent e)
{
ScaleLabel.Text = "比例尺1:" + ((long)this.mainMapControl.MapScale).ToString();
CoordinateLabel.Text = "当前坐标 X=" + e.mapX.ToString() + " Y = " + e.mapY.ToString() + " " + sMapUnits;
}
运行后细心的你可能会发现,当前坐标的后面的坐标单位为“ esriUnknownUnits ”或“ esriMeters ”之类,即系统在正常单位的前面加上了“ esri ”,追求完美的我们自然看得不舒服。那就进行简单的替换吧。
首先添加一个String 类型的变量,用于存储当前单位名称。
private string sMapUnits;//记录坐标单位
然后,编辑mapReplaced响应函数
3、mapReplaced响应函数
private void mainMapControl_OnMapReplaced(object sender, ESRI.ArcGIS.Controls.IMapControlEvents2_OnMapReplacedEvent e)
{
//修改坐标显示的单位名称
ESRI.ArcGIS.esriSystem.esriUnits mapUnits = mainMapControl.MapUnits;
switch (mapUnits)
{
case ESRI.ArcGIS.esriSystem.esriUnits.esriCentimeters:
sMapUnits = "Centimeters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriDecimalDegrees:
sMapUnits = "Decimal Degrees";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriDecimeters:
sMapUnits = "Decimeters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriFeet:
sMapUnits = "Feet";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriInches:
sMapUnits = "Inches";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriKilometers:
sMapUnits = "Kilometers";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriMeters:
sMapUnits = "Meters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriMiles:
sMapUnits = "Miles";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriMillimeters:
sMapUnits = "Millimeters";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriNauticalMiles:
sMapUnits = "NauticalMiles";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriPoints:
sMapUnits = "Points";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriUnknownUnits:
sMapUnits = "Unknown";
break;
case ESRI.ArcGIS.esriSystem.esriUnits.esriYards:
sMapUnits = "Yards";
break;
}
完成以后,运行界面如下:
--------------------------------------------------------------end----------------------------------------------------------