http://www.gissky.net- GIS空间站

我要投稿 投稿指南 RSS订阅 网站资讯通告:
搜索: 您现在的位置: GIS空间站 >> 技术专栏 >> ArcGIS >> ArcObjects开发 >> 正文

利用ArcGIS Engine、VS .NET和Windows控件开发GIS应用(三)

作者:3STECH    文章来源:中国3S网站(httpwww.863s.com)    点击数:    更新时间:2006-12-15
摘要:

(四) 设置ToolbarControlTOCControl控件的绑定控件

对于此应用程序,TOCControlToolbarControl控件将与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控件显示是空的,因为没有为它添加任何命令。试着缩放窗体,你会注意到控件不会改变尺寸。

绑定后的效果

(五) 处理窗口缩放

当窗口在运行时进行缩放时,PageLayoutControlMapControl不会自动改变自身的尺寸。要改变控件的尺寸以便它们总是与匹配窗口的范围,你必须将控件定在窗口上。如果PageLayoutControlMapControl包含大量的数据,在窗口缩放期间重绘这些数据显得相当重要。为了提高执行效率,你可以禁止数据重绘直到缩放操作完成后再重绘之。在缩放时,可以用一个可伸缩的位图来替代重绘数据。

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窗口消息。此时,我们禁止在MapControlPageLayoutControl上绘制图形,而是使用“stretchy bitmap”绘制。当Windows发送WM_EXITSIZEMOVE消息时,窗体结束缩放,这时我们全部重绘新的范围。

(六) ToolbarControl增加命令

ArcGIS Engine提供了120多个命令和工具,它们与MapControlPageLayoutControlToolbarControl直接相互协作。这些命令和工具为你提供了大量的经常使用的地图导航、图形管理、地物选择等方面的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中的图形文档。使用页面布局命令对当前的页面布局进行导航控制,要对存在于数据框架中的数据进行导航则使用地图命令。利用找开文档命令可以浏览并加载其他的图形文档。

Tags:ArcGIS Engine  
责任编辑:gissky
关于我们 - 联系我们 - 广告服务 - 友情链接 - 网站地图 - 中国地图