1 / 20

ArcGIS Engine 控件

ArcGIS Engine 控件. 2011/09/19 星期一. 课 题:第二讲 ArcGIS Engine 控件 目的要求:通过本章的学习,理解 ArcGIS Engine 中的控件,并运用控件进行 GIS 二次开发 教学重点:运用 ArcGIS Engine 控件进行 GIS 二次开发 教学难点:运用 ArcGIS Engine 控件进行 GIS 二次开发 教学课时: 2 学术前沿:. 使用 ArcGIS Engine 控件进行 GIS 二次开发是一种快速、高效的方式。

cruz
Download Presentation

ArcGIS Engine 控件

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  1. ArcGIS Engine控件 2011/09/19 星期一

  2. 课 题:第二讲 ArcGIS Engine控件 • 目的要求:通过本章的学习,理解ArcGIS Engine中的控件,并运用控件进行GIS二次开发 • 教学重点:运用ArcGIS Engine控件进行GIS二次开发 • 教学难点:运用ArcGIS Engine控件进行GIS二次开发 • 教学课时:2 • 学术前沿:

  3. 使用ArcGIS Engine控件进行GIS二次开发是一种快速、高效的方式。 • ArcGIS Engine提供了大量高级开发控件,使开发人员可以建立或扩展GIS应用程序和创建高质量的地图用户界面。 • LicenseControl • MapControl • PageLayoutControl • SceneControl • GlobeControl • SymbologyControl • ReaderControl • ToobarControl • TOCControl

  4. LicenseControl • 许可证控件 • 提供ArcGIS Engine的功能许可,可通过属性扩展和定制许可保证程序的正常运行 • 在其他控件前先加载 • PageLayoutControl • 布局显示控件 • 封装了PageLayout对象,可加载和显示ArcMap制作的地图文档 • 用于地图的修饰和整理,用于生成一幅成品地图 • 实现了IMxContent接口,可写入地图文档 • MapControl • 地图显示控件 • 封装了Map对象,可加载和显示ArcMap制作的地图文档 • 可用于地图数据的显示和分析 • 实现了IMxContent接口,可写入地图文档

  5. GlobeControl • 三维地球显示控件 • 封装了GlobeViewer对象,可加载和显示ArcGlobe制作的Globe文档 • 内置了导航功能 • 部署时需要ArcGIS Engine的3D运行时选项 • SymbologyControl • 样式控件 • 加载和显示*.SeverStyle文件,用于地图文档的符号化 • SceneControl • 三维场景显示控件 • 封装了SceneViewer对象,可加载和显示ArcScene制作的Scene文档 • 内置了导航功能 • 部署时需要ArcGIS Engine的3D运行时选项

  6. ReaderControl • 显示发布的地图文档 • 提供简单对象模型,对应于ArcReader桌面应用程序的“地图”和“布局”及“内容表(TOC)” • 包含ArcReader桌面应用程序使用的内容窗口和工具,如Find窗口和Identify工具等 • 用来读取由ArcReader Publisher扩展模块发布的pnf文件 • ToolbarControl • 需要“伙伴控件” 协调工作 • 可以驻留操作其“伙伴控件” 的命令、工具和菜单 • TOCControl • 需要“伙伴控件” 协调工作 • 提供一个交互对象树视图保持与“伙伴控件”同步

  7. ArcGIS控件的公共特性 • 每个ArcGIS控件都是一个嵌入式组件, 可以直接拖放到可视化设计环境提供的容器窗体中, 并可方便地改变控件大小和位置, 以便与其他组件组成用户界面。 • 将ArcGIS控件拖放到容器中后, 可通过右键点击该控件并选择属性菜单项, 就可以方便地设置ArcGIS控件的相关属性。 • 每个ArcGIS控件都封装了粗粒度的ArcObjects, 同时又提供了对细粒度的ArcObjects的访问,这就简化了开发过程。PageLayoutControl封装了布局(PageLayout)对象。布局对象至少包含一个MapFrame元素, 该MapFrame元素包含一个地图(Map)对象, 而地图对象又可以包含多个栅格、矢量或自定义图层(Layer)对象。 • 每个ArcGIS控件都会响应终端用户的键盘和鼠标交互而触发事件。响应发生在控件内的行为会触发一些其他事件。例如, 当装载一个地图文档到MapControl时, 就会触发OnMapReplaced事件,或者当通过拖放将一个对象在MapControl上拖动时, 就会触发OnOleDrop事件。

  8. ArcGIS控件的公共特性 • ToolbarControl和TOCControl都要与另一个伙伴控件协同工作。伙伴控件一般是MapControl、PageLayoutControl、ReaderControl、SceneControl或GlobeControl。伙伴控件可以在设计时通过控件的属性页设置(在支持属性页功能的开发环境中可以这样设置), 或者用SetBuddyControl方法编程设置。 • ArcGIS Engine提供了一系列命令、工具和菜单与ArcGIS控件协同工作。例如, MapControl和PageLayoutControl有一套地图导航、要素选择和图形元素命令与其协同工作。 • 所有的ArcGIS控件都是通过Carto访问ArcObjects的。 • 所有ArcGIS控件都有属性、方法和事件。

  9. MapControl、TOCControl与ToolbarControl • MapControl、PageLayoutControl、SceneControl 和GlobeContro l等都可用于地图文档的显示, 因此统称为制图控件; TOCControl和ToolbarControl则需要伙伴控件协同工作, 因此称为框架控件。伙伴控件可以是制图控件的一种, 框架控件与伙伴控件 协同工作的原理大体相同。 • TOCControl用于控制MapControl加载的地图文档图层, ToolbarControl驻留了操作MapControl的命令、工具和菜单, MapControl用于显示和编辑地图文档; TOCControl与ToolbarControl需要伙伴控件协同工作, 根据彼此的状态通信和同步, TOCControl的伙伴控件需实现接口ITOCBuddy, ToolbarControl的伙伴控件需实现接口IToolbarBuddy; 伙伴控件可以在设计时通过框架控件的属性页设置,或在编程时使用SetBuddyControl设置。

  10. 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提供实现显示用户拉动鼠标所画的框并改变布局的范围。

  11. ToolbarControl的定制与扩展 • ToolbarControl承载了众多命令、工具、菜单和工具条, 终端用户使用这些命令对象与ToolbarControl的伙伴控件进行交互, 完成诸如地图放大、缩小、漫游和属性查询等操作, ToolbarControl使用钩子(hook)联系命令对象和伙伴控件 , 并提供一系列属性、方法和事件用于管理控件外观、设置伙伴控件、添加删除命令项等。 • 开发人员可以对ToolbarControl进行定制和扩展, 定制方法有: 在运行时通过CustomizeDialog 增加和移除命令, 开发时通过属性页设置命令到工具条上, 运行时创建和显示菜单; 另外可以通过创建定制的命令、工具、菜单和工具条对ToolbarControl进行扩展。 • 所有命令对象都实现了接口ICommand。当命令对象被驻留到ToolbarContro l后就会立即调用Icommand.OnCreate()方法。这个方法将一个句柄(handle)或钩子(hook)传递给该命令操作的应用程序, 命令要测试该钩子是不是可以操作的一个对象, 不支持则自动失效, 支持则存储该钩子以便以后使用, 这就是为什么ToolbarControl上有些命令可用, 而有些命令处于灰色不可用。

  12. ToolbarControl的定制与扩展 • 默认情况下, ToolbarControl每半秒钟自动更新一次, 以确保驻留在ToolbarControl上的每个工具条命令项的外观与其底层命令的Enabled、Bitmap和Caption属性同步。更新频率由UpdateInterval属性控制, UpdateInterval为0时会停止自动更新, 这时可以调用Update方法刷新每个工具条命令项的状态。 • 通过设置ToolbarControl的Customize属性可以使ToolbarControl处于定制模式, 开发人员可以编程启动非模态定制对话框( CustomizeDialog), 定制对话框列出了所有的控件命令以及任何自定义命令、工具集和菜单, 终端用户则可以打开对话框对ToolbarControl上的命令添加、删除及改变命令项外观等。 • ToolbarControl维护着一个操作栈, 以便实现命令项的撤销( undo) 和重做( redo) 功能。 • 每个ToolbarControl和工具条菜单都维护着一个命令池( CommandPool), 用于管理使用的命令对象集, 命令对象要么作为唯一识别该命令的一个UID 对象(使用GUID) , 要么作为命令对象的一个现有例程被添加到命令池中。

  13. 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控件会将任何键盘和鼠标事件传送给该工具。

  14. private void menuZoomIn_Click(object sender, EventArgs e) { ICommand objCommand = new ControlsMapZoomInToolClass(); objCommand.OnCreate(axMapControl1.Object); axMapControl1.CurrentTool = (ITool)objCommand; }

  15. 思考题: • 1. 哪些控件需要设置Buddy属性?为什么要设置Buddy属性? • 2. 运用至少3个控件开发简单的GIS应用程序。 • 教学总结: • 本次课程引导学生对ArcGIS Engine控件有了初步了解,并用这些控件搭建了简单的GIS应用程序。通过这次讲授,提高了学生的学习兴趣。

More Related