200 likes | 732 Views
ArcGIS Engine 控件. 2011/09/19 星期一. 课 题:第二讲 ArcGIS Engine 控件 目的要求:通过本章的学习,理解 ArcGIS Engine 中的控件,并运用控件进行 GIS 二次开发 教学重点:运用 ArcGIS Engine 控件进行 GIS 二次开发 教学难点:运用 ArcGIS Engine 控件进行 GIS 二次开发 教学课时: 2 学术前沿:. 使用 ArcGIS Engine 控件进行 GIS 二次开发是一种快速、高效的方式。
E N D
ArcGIS Engine控件 2011/09/19 星期一
课 题:第二讲 ArcGIS Engine控件 • 目的要求:通过本章的学习,理解ArcGIS Engine中的控件,并运用控件进行GIS二次开发 • 教学重点:运用ArcGIS Engine控件进行GIS二次开发 • 教学难点:运用ArcGIS Engine控件进行GIS二次开发 • 教学课时:2 • 学术前沿:
使用ArcGIS Engine控件进行GIS二次开发是一种快速、高效的方式。 • ArcGIS Engine提供了大量高级开发控件,使开发人员可以建立或扩展GIS应用程序和创建高质量的地图用户界面。 • LicenseControl • MapControl • PageLayoutControl • SceneControl • GlobeControl • SymbologyControl • ReaderControl • ToobarControl • TOCControl
LicenseControl • 许可证控件 • 提供ArcGIS Engine的功能许可,可通过属性扩展和定制许可保证程序的正常运行 • 在其他控件前先加载 • PageLayoutControl • 布局显示控件 • 封装了PageLayout对象,可加载和显示ArcMap制作的地图文档 • 用于地图的修饰和整理,用于生成一幅成品地图 • 实现了IMxContent接口,可写入地图文档 • MapControl • 地图显示控件 • 封装了Map对象,可加载和显示ArcMap制作的地图文档 • 可用于地图数据的显示和分析 • 实现了IMxContent接口,可写入地图文档
GlobeControl • 三维地球显示控件 • 封装了GlobeViewer对象,可加载和显示ArcGlobe制作的Globe文档 • 内置了导航功能 • 部署时需要ArcGIS Engine的3D运行时选项 • SymbologyControl • 样式控件 • 加载和显示*.SeverStyle文件,用于地图文档的符号化 • SceneControl • 三维场景显示控件 • 封装了SceneViewer对象,可加载和显示ArcScene制作的Scene文档 • 内置了导航功能 • 部署时需要ArcGIS Engine的3D运行时选项
ReaderControl • 显示发布的地图文档 • 提供简单对象模型,对应于ArcReader桌面应用程序的“地图”和“布局”及“内容表(TOC)” • 包含ArcReader桌面应用程序使用的内容窗口和工具,如Find窗口和Identify工具等 • 用来读取由ArcReader Publisher扩展模块发布的pnf文件 • ToolbarControl • 需要“伙伴控件” 协调工作 • 可以驻留操作其“伙伴控件” 的命令、工具和菜单 • TOCControl • 需要“伙伴控件” 协调工作 • 提供一个交互对象树视图保持与“伙伴控件”同步
ArcGIS控件的公共特性 • 每个ArcGIS控件都是一个嵌入式组件, 可以直接拖放到可视化设计环境提供的容器窗体中, 并可方便地改变控件大小和位置, 以便与其他组件组成用户界面。 • 将ArcGIS控件拖放到容器中后, 可通过右键点击该控件并选择属性菜单项, 就可以方便地设置ArcGIS控件的相关属性。 • 每个ArcGIS控件都封装了粗粒度的ArcObjects, 同时又提供了对细粒度的ArcObjects的访问,这就简化了开发过程。PageLayoutControl封装了布局(PageLayout)对象。布局对象至少包含一个MapFrame元素, 该MapFrame元素包含一个地图(Map)对象, 而地图对象又可以包含多个栅格、矢量或自定义图层(Layer)对象。 • 每个ArcGIS控件都会响应终端用户的键盘和鼠标交互而触发事件。响应发生在控件内的行为会触发一些其他事件。例如, 当装载一个地图文档到MapControl时, 就会触发OnMapReplaced事件,或者当通过拖放将一个对象在MapControl上拖动时, 就会触发OnOleDrop事件。
ArcGIS控件的公共特性 • ToolbarControl和TOCControl都要与另一个伙伴控件协同工作。伙伴控件一般是MapControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl。伙伴控件可以在设计时通过控件的属性页设置(在支持属性页功能的开发环境中可以这样设置), 或者用SetBuddyControl方法编程设置。 • ArcGIS Engine提供了一系列命令、工具和菜单与ArcGIS控件协同工作。例如, MapControl和PageLayoutControl有一套地图导航、要素选择和图形元素命令与其协同工作。 • 所有的ArcGIS控件都是通过Carto访问ArcObjects的。 • 所有ArcGIS控件都有属性、方法和事件。
MapControl、TOCControl与ToolbarControl • MapControl、PageLayoutControl、SceneControl 和GlobeContro l等都可用于地图文档的显示, 因此统称为制图控件; TOCControl和ToolbarControl则需要伙伴控件协同工作, 因此称为框架控件。伙伴控件可以是制图控件的一种, 框架控件与伙伴控件 协同工作的原理大体相同。 • TOCControl用于控制MapControl加载的地图文档图层, ToolbarControl驻留了操作MapControl的命令、工具和菜单, MapControl用于显示和编辑地图文档; TOCControl与ToolbarControl需要伙伴控件协同工作, 根据彼此的状态通信和同步, TOCControl的伙伴控件需实现接口ITOCBuddy, ToolbarControl的伙伴控件需实现接口IToolbarBuddy; 伙伴控件可以在设计时通过框架控件的属性页设置,或在编程时使用SetBuddyControl设置。
MapControl、TOCC ontro l与Too lbarControl • MapControl实现了接口ITOCBuddy 和接口IToolbarBuddy。ITOCBuddy 通过方法GetActiveView( )返回IActiveView, TOCControl 通过方法SetActiveView( )设置ActiveView, 这样MapControl与TOCControl就达到了交互。例如当从MapControl删除一个图层时, 该图层也会从TOCControl删除,同样当从TOCControl中取消某个图层的Visibility复选框时, 该图层在MapControl也不再可视。IToolbarBuddy 用于设置MapControl的CurrentTool属性,ToolbarControl也维护着一个CurrentTool属性, 当用户单击ToolbarControl上的某工具时, 该工具就会被赋给CurrentTool。 例如用户单击ToolbarControl上的页面缩小 工具, 该工具就会被赋给MapControl和ToolbarControl的CurrentTool属性, 页面缩小工具的实现就会查询ToolbarControl已访问的伙伴控件 (MapControl) , 并取回该MapControl 然后MapControl提供实现显示用户拉动鼠标所画的框并改变布局的范围。
ToolbarControl的定制与扩展 • ToolbarControl承载了众多命令、工具、菜单和工具条, 终端用户使用这些命令对象与ToolbarControl的伙伴控件进行交互, 完成诸如地图放大、缩小、漫游和属性查询等操作, ToolbarControl使用钩子(hook)联系命令对象和伙伴控件 , 并提供一系列属性、方法和事件用于管理控件外观、设置伙伴控件、添加删除命令项等。 • 开发人员可以对ToolbarControl进行定制和扩展, 定制方法有: 在运行时通过CustomizeDialog 增加和移除命令, 开发时通过属性页设置命令到工具条上, 运行时创建和显示菜单; 另外可以通过创建定制的命令、工具、菜单和工具条对ToolbarControl进行扩展。 • 所有命令对象都实现了接口ICommand。当命令对象被驻留到ToolbarContro l后就会立即调用Icommand.OnCreate()方法。这个方法将一个句柄(handle)或钩子(hook)传递给该命令操作的应用程序, 命令要测试该钩子是不是可以操作的一个对象, 不支持则自动失效, 支持则存储该钩子以便以后使用, 这就是为什么ToolbarControl上有些命令可用, 而有些命令处于灰色不可用。
ToolbarControl的定制与扩展 • 默认情况下, ToolbarControl每半秒钟自动更新一次, 以确保驻留在ToolbarControl上的每个工具条命令项的外观与其底层命令的Enabled、Bitmap和Caption属性同步。更新频率由UpdateInterval属性控制, UpdateInterval为0时会停止自动更新, 这时可以调用Update方法刷新每个工具条命令项的状态。 • 通过设置ToolbarControl的Customize属性可以使ToolbarControl处于定制模式, 开发人员可以编程启动非模态定制对话框( CustomizeDialog), 定制对话框列出了所有的控件命令以及任何自定义命令、工具集和菜单, 终端用户则可以打开对话框对ToolbarControl上的命令添加、删除及改变命令项外观等。 • ToolbarControl维护着一个操作栈, 以便实现命令项的撤销( undo) 和重做( redo) 功能。 • 每个ToolbarControl和工具条菜单都维护着一个命令池( CommandPool), 用于管理使用的命令对象集, 命令对象要么作为唯一识别该命令的一个UID 对象(使用GUID) , 要么作为命令对象的一个现有例程被添加到命令池中。
ToolbarControl的定制与扩展 • 有3种方法可以将命令对象添加到ToolbarControl • 使用UID 对象(使用GUID) ; • 使用progID; • 给AddItem 方法提供某个现有命令的一个实例。 • 开发人员使用ControlsCommands名称空间提供的大量命令、工具条和工具控件等有2种方式: 一是通过ToolbarControl使用, 一是脱离ToolbarControl直接操作ArcEngine控件。开发人员自定义命令直接操作A rcEngine控件的流程: • 通过编程创建命令的一个新例程, 并将单个ArcGIS控件传递给OnCreate方法。 • 如果命令只实现了ICommand 接口, 开发人员可以在适当的时候调用OnC lick方法以执行特定行动。 • 如果命令为实现了ICommand 接口和ITool接口的工具, 开发人员必须将该工具设置为ArcG IS控件中的Curren tTool。Arc IS控件会将任何键盘和鼠标事件传送给该工具。
private void menuZoomIn_Click(object sender, EventArgs e) { ICommand objCommand = new ControlsMapZoomInToolClass(); objCommand.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objCommand; }
思考题: • 1. 哪些控件需要设置Buddy属性?为什么要设置Buddy属性? • 2. 运用至少3个控件开发简单的GIS应用程序。 • 教学总结: • 本次课程引导学生对ArcGIS Engine控件有了初步了解,并用这些控件搭建了简单的GIS应用程序。通过这次讲授,提高了学生的学习兴趣。