利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用(三)
(四) 设置ToolbarControl与TOCControl控件的绑定控件 对于此应用程序,TOCControl和ToolbarControl控件将与PageLayoutControl相互协作,而不是MapControl。为此PageLayoutControl必须设置为绑定控件。TOCControl使用绑定的ActiveView显示图形、图层和...
- 作者:3STECH来源:中国3S网站(httpwww.863s.com)|2006年12月15日
(四) 设置ToolbarControl与TOCControl控件的绑定控件
对于此应用程序,TOCControl和ToolbarControl控件将与PageLayoutControl相互协作,而不是MapControl。为此PageLayoutControl必须设置为绑定控件。TOCControl使用绑定的ActiveView显示图形、图层和符号。而位于ToolbarControl上的任何命令、工具或菜单项会受绑定控件的显示影响。
1. 在Form_Load事件中的加载文档代码的后面键入以下红色部分内容:
private void Form1_Load(object sender, System.EventArgs e)
{
// 使用相对路径向PageLayoutControl加载一个图形文档
string filename = @"..\..\..\..\..\..\..\..\Data\\ARCGIS_Engine_Developer_Guide\\gulf of st. lawrence.mxd";
if ( axPageLayoutControl1.CheckMxFile(filename) )
{
axPageLayoutControl1.LoadMxFile(filename, "");
}
// 设置绑定控件
axTOCControl1.SetBuddyControl(axPageLayoutControl1);
axToolbarControl1.SetBuddyControl(axPageLayoutControl1);
}
2. 生成并运行应用程序。图形文档被加载到PageLayoutControl,并且TOCControl列出了图形文档中的数据图层。使用TOCControl通过复选和取消复选框控制图层的可见性。默认地,图形文档的焦点图(focus map)被装入MapControl控件。在这种当前情况下,ToolbarControl控件显示是空的,因为没有为它添加任何命令。试着缩放窗体,你会注意到控件不会改变尺寸。
(五) 处理窗口缩放
当窗口在运行时进行缩放时,PageLayoutControl和MapControl不会自动改变自身的尺寸。要改变控件的尺寸以便它们总是与匹配窗口的范围,你必须将控件锚定在窗口上。如果PageLayoutControl或MapControl包含大量的数据,在窗口缩放期间重绘这些数据显得相当重要。为了提高执行效率,你可以禁止数据重绘直到缩放操作完成后再重绘之。在缩放时,可以用一个可伸缩的位图来替代重绘数据。
1. 在设计模式显示窗体并从属性窗口中选择axPageLayoutControl1。单击Anchor属性,将axPageLayoutControl1锚定在窗体的顶、左、底和右部。
2. 锚定axMapControl控件到窗体的顶、左和底部。
3. 在Form_Load事件的开头增加以下代码:
// 当缩放时禁止重绘
this.SetStyle(ControlStyles.EnableNotifyMessage, true);
4. 向类增加以下常量:
public class Form1 : System.Windows.Forms.Form
{
// ……
private const int WM_ENTERSIZEMOVE = 0x231;
private const int WM_EXITSIZEMOVE = 0x232;
// ……
}
5. 向重载的OnNotifyMessage方法中增加下列代码:
protected override void OnNotifyMessage(Message m)
{
base.OnNotifyMessage (m);
// 以下为手工添加的代码
if ( m.Msg == WM_ENTERSIZEMOVE)
{
axMapControl1.SuppressResizeDrawing(true, 0);
axPageLayoutControl1.SuppressResizeDrawing(true, 0);
}
else if ( m.Msg == WM_EXITSIZEMOVE)
{
axMapControl1.SuppressResizeDrawing(false, 0);
axPageLayoutControl1.SuppressResizeDrawing(false, 0);
}
}
6. 生成并运行应用程序,试着缩放窗口。
注:禁止缩放时重画方法是通过检查发送到窗体的Windows消息工作的。当窗口开发缩放时,Windows发送WM_ENTERSIZEMOVE窗口消息。此时,我们禁止在MapControl和PageLayoutControl上绘制图形,而是使用“stretchy bitmap”绘制。当Windows发送WM_EXITSIZEMOVE消息时,窗体结束缩放,这时我们全部重绘新的范围。
(六) 向ToolbarControl增加命令
ARCGIS Engine提供了120多个命令和工具,它们与MapControl、PageLayoutControl和ToolbarControl直接相互协作。这些命令和工具为你提供了大量的经常使用的地图导航、图形管理、地物选择等方面的GIS功能。现在将在你的应用程序中增加这些命令和工具的一部分。
1. 在Form_Load事件中的加载文档代码之前添加如下代码。
// 增加打开档命令
string progID;
progID = "esriControlToolsGeneric.ControlsOpenDocCommand";
axToolbarControl1.AddItem(progID, -1, -1, false, 0,
esriCommandStyles.esriCommandStyleIconOnly);
// 增加PageLayout导航命令
progID = "esriControlToolsPageLayout.ControlsPageZoomInTool";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsPageLayout.ControlsPageZoomOutTool";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsPageLayout.ControlsPagePanTool";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsPageLayout.ControlsPageZoomWholePageCommand";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentBackCommand";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsPageLayout.ControlsPageZoomPageToLastExtentForwardCommand";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
// 增加地图导航命令
progID = "esriControlToolsMapNavigation.ControlsMapZoomInTool";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsMapNavigation.ControlsMapZoomOutTool";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsMapNavigation.ControlsMapPanTool";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
progID = "esriControlToolsMapNavigation.ControlsMapFullExtentCommand";
axToolbarControl1.AddItem(progID, -1, -1, true, 0,
esriCommandStyles.esriCommandStyleIconOnly);
// 使用相对路径向PageLayoutControl加载一个图形文档
// ……
2. 生成并运行应用程序。现在ToolbarControl包含了ARCGIS Engine命令和工具,你可以使用它们导航加载到PageLayoutControl中的图形文档。使用页面布局命令对当前的页面布局进行导航控制,要对存在于数据框架中的数据进行导航则使用地图命令。利用找开文档命令可以浏览并加载其他的图形文档。