http://www.cnblogs.com/maweifeng/archive/2006/07/19/455024.html  原文地址

ArcGIS Desktop开发的类型

○ 自定义ArcMap、ArcCatalog的布局和界面,包括增加自定义的按钮,指定相应的宏;

○ 使用VBA创建解决方案;

○ 创建ArcGIS扩展;

○ 创建独立的应用程序(后面单独说明)。


应用程序的插件架构

对于ArcGIS Desktop的开发,最关键的核心问题在于理解ArcGIS插件架构的运行机制,下面我们就对这个问题做一简单介绍。插件架构的核心在于应用程序定义插件遵循的接口,然后由自定义组件来实现这个接口。其中有几个关键点:

第一,主应用程序如何知道要加载插件

对于ArcGIS是使用注册表,和MS Office类似,在注册表中建立一个“component categories”的条目,而组件要被ArcGIS加载,就需要注册后,在这里增加添加一个条目。对于现在的大多数.net程序和前COM时代的C或C++程序,则通过目录来做到这点,通过遍历目录中的文件,然后通过反射机制(.net)来加载。

而COM程序,如VB环境下,则可以通过CreatObject来加载一个组件。

第二,插件的初始化

初始化包括2方面,一方面,主程序要创建一个变量,类型为插件所实现的接口,然后创建该插件,而同时,调用插件的初始化代码,例如Connect,传入需要主程序要暴露给插件的引用(App)。对于COM程序或者.net,是通过事件来做到这一点。主程序触发初始化事件,该事件在插件的代码中实现,根据传来的变量,初始化插件的运行环境。对于C或者C++这样的环境,可以通过函数指针和回调函数来实现这一点。

插件的初始化过程,就是插件插件和主程序通讯桥梁的过程,这个桥梁,对于ArcGIS,就是IApplication接口。

第三,插件和应用程序之间的通讯

其实上边已经差不多说清楚了,对于主应用程序,是通过创建插件对象,获得当前插件的实例,然后控制他,如果是插件是一个按钮,那么初始化插件的时候,创建了按钮对象,并绑定按钮的click事件由插件的相应过程来处理。

对于插件,则由于在初始化中通过初始化事件(例如OnCreat或者Connect这样的事件)的参数得到了当前应用程序的Application等对象实例,因此就可以使用这些对象实例来操作应用程序。

对于应用程序的一些状态变化,可以通过定义事件,然后在插件代码中响应这些事件来完成。

第四,用户界面

Microsoft Office的COM加载宏的编写,需要通过调用Office的Commandbar等对象来创建用户界面元素,可以完全自定义。对于Photoshop这样的程序,插件程序使用C或C++来完成,扩展的位置固定在几个确定的扩展点。ArcGIS个人觉得基本上处于二者之间。

ArcGIS Desktop开发基础(转)的更多相关文章

  1. ArcGIS Engine开发基础总结(一)

    标准Engine功能 地图浏览    地图制作 数据查询 数据分析 及 所有的开发控件 —MapControl, PageLayout, Toolbar, TOC, ArcReader 对所有矢量和栅 ...

  2. ArcGIS Engine开发前基础知识(4)

    ArcGIS不同开发方式的比较 关于GIS应用软件的开发,通常有三种方式:C/S架构.网络GIS和移动GIS.ArcGIS平台提供了对三种开发方式的支持,对于采用从C/S架构的大多数开发者来讲,首先想 ...

  3. ArcGIS Engine开发前基础知识(3)

    对象模型图 一.对象模型图中的类与接口 ArcGIS Engine 提供大量的对象,这些对象之间存在各种各样的关系,如继承.组合.关联等.对象模型图(Object model diagram,ODM) ...

  4. ArcGIS Engine开发前基础知识(2)

    ArcGIS基本控件简介 ArcGIS Engine控件是一组可视化的开发组件,每个ArcGIS Engine控件都是一个COM组件.这些组件包括MapControl,PageLayoutContro ...

  5. ArcGIS Engine开发鹰眼图的功能(基础篇)

    鹰眼是用于调节全视域范围内主地图显示范围情况的副地图.它体现了地图整体与详细局部的关系. 用户可以通过鼠标单击或者画框等动作实现鹰眼与主地图的交互情况. 鹰眼功能的原理是通过主地图窗口的地图控件和鹰眼 ...

  6. ArcGIS学习推荐基础教程摘录

    ###########-------------------摘录一--------------------------########### ***************************** ...

  7. ArcGIS Engine开发之地图基本操作(4)

    ArcGIS Engine开发中数据库的加载 1.加载个人地理数据库数据 个人地理数据库(Personal Geodatabase)使用Miscrosoft Access文件(*.mdb)进行空间数据 ...

  8. ArcGIS Engine开发的ArcGIS 版本管理的功能

    原文:ArcGIS Engine开发的ArcGIS 版本管理的功能 转自:http://blog.csdn.net/linghe301/article/details/7965901 这是以前的Arc ...

  9. ArcGIS Desktop 与 Excel(转)

    来自:http://blog.csdn.net/kikitamoon/article/details/19043161 微软 OFFICE 产品中,Excel是很强大,并且平民化的表格制作工具.Arc ...

随机推荐

  1. google对js延迟加载方案的建议

    浏览器在执行JavaScript代码时会停止处理页面,当页面中有很多JavaScript文件或代码要加载时,将导致严重的延迟.尽管可以使用defer.异步或将JavaScript代码放到页面底部来延迟 ...

  2. BigPipe

    BigPipe是一个重新设计的基础动态网页服务体系.大体思路是,分解网页成叫做Pagelets的小块,然后通过Web服务器和浏览器建立管道并管理他们在不同阶段的运行.这是类似于大多数现代微处理器的流水 ...

  3. 关于jsb中js与c++的相互调用

    1.js调用c++函数 在c++中声明函数,名为functionCpp,通过spidermonkey中jsapi的JS_DefineFunction绑定一个js函数,名为functionJS,此函数名 ...

  4. OS X 10.9 Mavericks 安装 thrift 0.9.1

    通过Homebrew安装的时候,编译会报错.查了一下资料,原来是10.9系统默认使用的libc++的库,而且移除了C++ 11标准前tr库,所以编译存在问题.且笔者使用的时候,brew安装只支持到0. ...

  5. 下一个系列学习列表Spring.net+NHibernate+MVC

    开源框架完美组合之Spring.NET + NHibernate + ASP.NET MVC + jQuery + easyUI 中英文双语言小型企业网站Demo 刘冬.NET 2011-08-19 ...

  6. redis源码学习

    上帝禁区  http://blog.csdn.net/a600423444/article/details/8944601

  7. 随机 I/O & 顺序 I/O

    在谈这俩概念前.先来说说 大I/O vs. 小I/O     通常.我们把 <=16KB 的I/O认为是小I/O.而 >=32KB 的I/O认为是大I/O     了解I/O的大小.影响到 ...

  8. WPF 之 左键弹出操作菜单,并禁用右键菜单

    在目前的WPF版本中,很多的控件都有一个ContextMenu的属性,可以设置组件的右键菜单,这点确实是很方便,但是有些时候我们可能会需要当单击鼠标左键才弹出这个ContextMenu,而不是单击鼠标 ...

  9. SQL Server 中的事务和锁(三)-Range S-U,X-X 以及死锁

    在上一篇中忘记了一个细节.Range T-K 到底代表了什么?Range T-K Lock 代表了在 SERIALIZABLE 隔离级别中,为了保护范围内的数据不被并发的事务影响而使用的一类锁模式(避 ...

  10. 菜菜菜鸟学习之JavaWeb 入门1(自己的学习理解,不对之处请大神们多多指教啊)

    一.相关基础知识 1.C/S(Client/Server)架构和B/S(Browser/Server)架构 首先说C/S架构,简单讲其实很常见,类似QQ等需要下载客户端的应用程序就是建立在C/S架构中 ...