AO开发.docx
《AO开发.docx》由会员分享,可在线阅读,更多相关《AO开发.docx(9页珍藏版)》请在冰豆网上搜索。
AO开发
AO开发(ExploringArcObject)
第一卷应用程序和绘图(Vol.1ApplicationsandCartography)
第一章AO介绍
AO是ArcGIS家族应用程序(如:
ArcMap,ArcCatalog、ArcScene)的开发平台,AO组件提供了ArcInfo和ArcView的所有功能。
在AO框架的基础上可以通过其它组件创建特定领域的组件。
第一节AO开发帮助系统
一、AO框架
AO是用COM技术建立的,因此,可以使用任何支持COM的开发语言来编辑COM组件以扩展AO功能,可以和ESRI开发人员一样扩展AO结构的任何一部分。
第二章
第三章自定义用户界面(Customizingtheuserinterface)
第一节用文档的模板自定义程序(CUSTOMIZINGTHROUGHDOCUMENTSANDTEMPLATES)
一、文档和模板(DOCUMENTSANDTEMPLATES)
文档(document)保存了地图(map)的状态(state)、定制用户界面设置(customuserinterfacesettings)和一个VBA工程。
正确理解文档和模板是开发AO的关键。
每个文档和模板都包含用户界面的持久状态、一个VBA工程和程序其它信息,如地图布局。
二、定制ArcMap(CUSTOMIZINGARCMAP)
可以通过以下几个方式定制ArcMap:
(1)、为地理数据添加参考系(addreferencestogeographicdata)并定义数据的显示方式
(2)、创建一个带空间参考系和辅助地图要素的地图布局
(3)、添加、移除或重组标准用户界面
(4)、在VBA工程中写代码
对ArcMap所做的全部变动(如:
内容表(tableofcontents)、地图布局、工具栏及命令项和VBA代码)都保存在一个地图文档或地图模板中。
地图文档可以保存在文件系统的任何地方,以.mxd为后缀。
1、地图模板(Maptemplates)
可以使用地图模板来分别定制---全局的、工程的或文档的。
模板也是一种文档,它们的结构几乎一样,功能上的不同是ArcMap能识别并用模板来创建新的地图文档。
这和Office程序中的模板类似。
对用户界面或VBA工程所作的任何改变都成为新创建的文档的一部分。
另外,对模板的任何改变都会在下次载入时反应出来。
在ArcMap中模板和文档有三个层次,可以将所作改变保存在任何层次以决定定制的使用范围。
2、定制地图文档(Custommapdocuments)
3、Selectivecustomizationwithtemplates
4、使用normal模板进行全局定制(Globalcustomizationswiththenormaltemplate)
ArcMap中有个Normal模板,存储了每个帐户的界面设置,对Normal模板的任何改变都会在下次打开所有的地图文档中反映出来。
安装软件后第一次启动ArcMap时,在个人帐户文件夹下会自动生成一个Normal模板,根据操作系统的不同分别在:
对于WindowsNT
C:
\WINNT\Profiles\\ApplicationData\ESRI\ArcMap\Templates\
对于Wdindows2000
C:
\DocumentsandSettings\\ApplicationData\ESRI\ArcMap\Templates\
这是默认的Normal模板,它包含了所有的标准工具栏和命令,并将工具栏和内容表置于其默认位置。
对Normal模板的任何改变都保存在这个文件中。
如果想让所作的改变在任何时候启动ArcMap时都能出现,那么可以将其保存在Normal模板中。
假如管理员有自定义的工具栏或工具,想让组织中的每个人都能访问,那么可以创建一个自定义的Normal模板,并让所有的人都使用这个模板而不是默认的。
可以这样做,管理员先定制Normal模板,然后将Normal.mxt文件拷贝到\ArcGIS\arcexe81\bin\Templates文件夹下,那么所有的人都会以这个而不是默认的Normal模板来启动ArcMap。
下面是其工作原理的例子。
启动ArcMap时如果在个人帐户下没有Normal.mxt文件,程序会搜索\ArcGIS\arcexe81\bin\Templates文件夹,并将Normal.mxt文件拷贝到帐户下作为个人的Normal模板。
如果在帐户下和\ArcGIS\arcexe81\bin\Templates下都没找到Normal.mxt文件,则程序会自动生成一个默认的Normal.mxt文件并放置在帐户下。
三、定制ArcCatalog(CUSTOMIZINGARCCATALOG)
可以通过以下几种方法定制ArcCatalog:
(1)、添加、移除或重组标准用户界面的要素
(2)、在VBA工程中编写代码
ArcCatalog不像ArcMap一样使用文档和模板的完整结构,ArcCatalog不用文档,也不基于模板,它只使用一个Normal模板。
因此,对ArcCatalog界面的所有更改都存储在Normal模板中。
安装ArcCatalog后第一次启动时,在帐户下会自动生成一个名为Normal.gxt的Normal模板,根据操作系统的不同存储在以下位置:
对于WindowsNT:
C:
\WINT\Profiles\ApplicationData\ESRI\ArcCatalog\
对于Windows2000:
C:
\DocumentsandSettings\\ApplicationData\ESRI\ArcCatalog\
第二节可实例化应用程序类(APPLICATIONCOCLASS)
每个运行的ArcGIS程序都是一个Application对象实例----ArcCatalog是ESRIArcCatalog对象库(esriGx.olb)中的Application实例,ArcMap是ESRIArcMap对象库(esriMx.olb)中的Application实例。
IgxApplication在第7章“WorkingwiththeCatalog”中讲述,IMxApplication在第4章“Composingmaps”中讲述。
两个Application类都共享IApplication接口。
当ArcGIS程序启动时Application对象在VBA中实例化,它作为全局对象使用,可以用下面的方法来查看其属性:
MsgBoxApplication.Caption
也可以在VB或其它支持COM的语言环境中启动ArcMap,例如,在VB中启动时,创建一个新的工程,引用ESRI核心库(esriCore),将下面的代码加入一个过程,然后执行:
Dimm_docAsIDocumetn
Setm_doc=NewMxDocument‘startArcMap
通过Iapplication接口可以访问Document对象、扩展对象、状态栏对象、模板对象、当前工具对象和VBE。
有几种方式可以打开、保存、打印文档,加锁和解锁用户定制程序,显示对话框和退出应用程序。
ArcCatalog没有实现NewDocument、PrintDocument、PrintPreview和SaveAsDocument方法,其中SaveDocument方法是保存Normal模板,而不是保存一个文档。
Application对象实现了IVbaApplication接口,通过它可以程序化地插入、移除和运行VBA代码,而不用打开VBE(VisualBasicEditor)。
要访问这个接口可以对Application执行QueryInterface(QI)。
IvbaApplication接口有创建新模块、插入代码到特定模块、移除模块和运行宏等方法。
下面的代码显示了如何创建一个新的VBA模块、插入VBA宏到模块和运行宏:
DimpVbaAppAsIVbaApplication
DimsAsString
SetpVbaApp=Application
pVbaApp.CreateCodeModule"Project","MyModule"
s="PublicSubMyMacro"&vbNewLine&_
"MsgboxApplication.Document.Title"&vbNewLine&"EndSub"
pVbaApp.InsertCode"Project","MyModule",s
pVbaApp.RunVBAMacro"Project","MyModule","MyMacro",Nothing
IMultiThreadedApplication接口提供了注册和反注册程序线程管理器及返回程序进程ID的方法。
多线程(multithreading)指一种软件配置,程序同时使用相互独立的执行过程,每个线程都有栈和CPU状态。
Application对象实现了IMultiThreadedApplication接口,经提供了注册用户创建线程管理器对象的简单回调机制。
线程管理器对象可以是任何实现了IDllThreadManager接口的对象,它有程序关闭前得到通知的优先权,这样在Application线程关闭前所有当前运行的线程老师可以干净地退出。
如果要开发组件在任何ArcGIS程序进程中使用并能创建线程,那么包含这个组件的DLL也必须包含实线IDllThreadManager接口的对象。
同时还要用IMultiThreadedApplication接口将此线程管理器注册到程序中。
IdllThreadManager接口有个OnShutdown方法以通知DLL线程管理对象程序将关闭,这样DLL线程管理对象可以终止DLL中组件创建的所有线程。
IWindowPosition接口提供了移动和改变窗口大小的方法。
任何窗口对象都可以实现这个接口。
所有的ArcGIS程序窗口都实现了这个接口,可以询问(QI)程序的IWindowPosition接口。
Left和Top属性决定了窗口在屏幕坐标系中的位置(相对于显示屏幕左上角)。
Height和Width属性决定了窗口的大小。
可以用Move方法同时设置这4个属性。
esriWindowState枚举指定了窗口是否处于normal、minimized或maximized状态。
下面的代码强制程序启动时窗口总是指定的大小和位置,将代码加入到Normal模板的ThisDocument中。
PrivateFunctionMxDocument_NewDocument()AsBoolean
DimpWindPosAsIWindowPosition
SetpWindPos=Application
pWindPos.Move10,10,600,500
EndFunction
PrivateFunctionMxDocument_OpenDocument()AsBoolean
DimpWindPosAsIWindowPosition
SetpWindPos=Application
pWindPos.Move10,10,600,500
EndFunction
和三节扩展ArcGIS程序(EXTENDINGARCGISAPPLICATIONS)