第3章 自定义用户接口

导读:用标准模板进行完全自定义,它储存了启动ArcMap需要载入的自定义用户接口,你对标准模板的定义将储存在这个文件中,假设你的管理员已经定义了工具栏或工具,你的管理员可以将她自定义的标准模板文件Normal.mxt复制到以下位置:\\A,这样每个人使用的都是她定义的标准模板,而是你可自定义的模板,3.2.3自定义ArcCatalog,你可以用以下方法自定义ArcCatalog:,?你可以添加、删除

第3章 自定义用户接口

用标准模板进行完全自定义

这里介绍ArcMap中三个加载的模板——标准模板、工程模板和工程如何在VBA浏览器中显示。

ArcMap中有一种特别的模板叫做标准模板,它储存了启动ArcMap需要载入的自定义用户接口。你对标准模板做的改变将被以后打开的所有图像文件所继承。当你在安装完ArcMap后第一次运行时,标准模板会自动创建在profiles文件夹中。它在不同操作系统的文件的位置如下:

Windows NT:

C:\\WINNT\\Profiles\\\\Application Data\\ESRI\\ArcMap\\Templates\\

Windows 2000:

C:\\Documents and Settings\\\\Application Data\\ESRI\\ArcMap\\Templates\\ 这个缺省的标准模板包含了所有的标准工具栏、指令、放置工具栏和目录的缺省位置。你对标准模板的定义将储存在这个文件中。

如果你希望在每次运行ArcMap时都显示这些改变,就把它们储存在标准模板中。假设你的管理员已经定义了工具栏或工具,而且她希望每个属于该组织的人都可以使用它们。你的管理员可以用它代替缺省标准模板。为了实现这个目的,你的管理员可以将她自定义的标准模板文件Normal.mxt复制到以下位置:\\ArcGIS\\arcexe81\\bin\\templates folder。这样每个人使用的都是她定义的标准模板。下面演示的是它如何工作的。

如果你在运行ArcMap时没发现有标准模板,软件会自动在以下位置中寻找\\ArcGIS\\arcexe81\\bin\\templates folder,如果找到,则将其复制到profiles文件夹中,并将其视做个人标准模板。然而,你使用的并不是组织内的标准模板,而是你可自定义的模板。如果在profiles文件夹或\\ArcGIS\\arcexe81\\bin\\templates folder中没有Normal.mxt文件将创建在profiles文件夹中。

3.2.3 自定义ArcCatalog

你可以用以下方法自定义ArcCatalog:

? 你可以添加、删除或重组标准用户接口中的元素。

? 你可以用VB编写代码。

ArcCatalog并不像ArcMap那样利用整个文件和模板的结构。ArcCatalog软件不是基于文件或基本模板;它只使用标准模板。因此,所有ArcCatalog的自定义接口都储存在标准模板中。

如果在安装软件后第一次使用ArcCatalog,一个标准模板Normal.gxt会自动创建在profiles文件夹,不用操作系统下的位置如下:

Windows NT:

C:\\WINNT\\Profiles\\\\Application Data\\ESRI\\ArcCatalog\\ Windows 2000:

C:\\Documents and Settings\\\\Application Data\\ESRI\\ArcCatalog\\

3.3 Application组件类

这个程序是一个核心对象,它代表了ArcGIS软件。通过这个软件,你可以获得属性和功能以及操纵其它元素,如文档、窗口控制和状态栏。

每一个运行的ArcGIS程序通过对象呈现出来——ArcCatalog通过ESRI ArcCatalog对象库中的程序。ArcMap通过ESRI ArcMap对象库中的程序。

IGXApplication在第七章中介绍。IMXApplication在第四章中介绍。Iapplication的接口被两个程序类共用。

当ArcGIS程序运行时,一个程序对象在VBA运行。它在所有的对象中有效,你可以用以下方法查阅程序的属性。

MsgBox Application.Caption

你可以在VB或其他COM语言中运行ArcMap程序。例如,在VB中运行ArcMap创建一个新的项目,在ESRI核心库中添加一个介绍,把以下代码添加在Sub中并执行它。

Dim m_doc As IDocument

Set m_doc = New MxDocument 'start ArcMap

扩展功能是个子系统可以给软件添加重要的功能。空间分析就是个很好的例子。 VC++项目使用#import直接获取类别信息。引入esriCore.olb可以自动在ArcGIS接口中建立“smart pointer”类。用smart pointer可以用以下方法创立ArcMap实例:

// Example : Creating an instance of ArcMap IDocumentPtr ipDoc (CLSID_MxDocument);

文档包含自定义用户接口设置、VBA过程和其它设置如层和图像扩展等。你可以打开或保存文档。

在IApplication接口中可获得文件对象,扩展功能、状态栏对象、模板对象、目前选择的工具和VB编辑器。

你可以用打开、保存和打印等功能;锁定和解锁自定义程序;显示对话框;退出程序。 ArcCatalog并不包含有创建新文件、打开文件、打印文件、打印预览和保存为文件的功能。保存文件功能是保存标准模板而不是保存文件。

程序对象包含有IVbaApplication接口,可以允许你编辑插入、删除和运行VBA代码而不用打开VB编辑器。

为了进入这个接口,在软件中运行QI。这个IVbaApplication接口有创建新的模板、在模板中插入代码、删除模板和运行macro的功能。

下面是如何创建一个新的VBA模板,在模板中插入VBAmacro和运行宏的代码: Dim pVbaApp As IVbaApplication Dim s As String

Set pVbaApp = Application

pVbaApp.CreateCodeModule \s = \

\

pVbaApp.InsertCode \

pVbaApp.RunVBAMacro \

IMultiThreadApplication接口有用程序注册和注销线程管理和返回程序ID的功能。 MultiThreading是指一种软件配置,可以使用执行中的独立路径。每个线程有它自己的堆栈和它自己的CPU声明。

软件对象必须遵循IMultiThreadApplication接口,它提供了简单的注册用户线程管理对象的回应机制。一个线程管理对象必须遵循IDllThreadManager接口。线程管理对象可在程序关闭前被告知,所有所有当前运行的线程可以在程序关闭前退出。

如果你开发了可以创建线程和用在ArcGIS程序进程中的组件,包含有这些组件的DLL也要遵循ThreadManager接口来注册这个线程管理对象。

IDllThreadManager接口有一个OnShutdown的功能可以同志DLL线程管理对象这个程序即将关闭,这样DLL线程管理可以终止这些在DLL中创建的线程。

IWindowPosition接口有移动和定义窗口大小的功能。所有的窗口对象都可以在这个接口中执行。所有的ArcGIS程序窗口可以在这个接口执行;你可以QI从程序到IWindowPosition。

左方和上方属性确定了窗口左上角在屏幕中的位置。高度和宽度属性确定了窗口的大小,用移动功能可以同时设置这四个属性。

EsriWindowState例举了窗口是否在标准、最小或最大状态。

以下在标准模板ThisDocument窗口中通常用来确定大小和位置的代码: Private Function MxDocument_NewDocument() As Boolean Dim pWindPos As IWindowPosition Set pWindPos = Application

pWindPos.Move 10, 10, 600, 500 End Function

Private Function MxDocument_OpenDocument() As Boolean Dim pWindPos As IWindowPosition Set pWindPos = Application

pWindPos.Move 10, 10, 600, 500 End Function

3.4 扩展ArcGIS软件

扩展功能提供了一个强大的机制,可以用来扩展ArcGIS软件的核心功能。扩展功能可以给工具栏添加新的工具,读取事件并做出回应,展示有效特征等。

一个扩展功能提供了软件的扩展机制。

开发人员在软件中创建新的指令和工具时扩展功能是开发的中心部分。通常这些指令和工具要有共同的数据或进入共同的UI组件。扩展功能是储存数据和开发UI组件的逻辑中心。主要的原因是每个运行的程序只有一个扩展功能的实例,而且在IApplication接口中可以给扩展功能定位并且运行它。

所有在程序中注册的扩展功能是由程序自动读取和卸载的。用户在最后不用去读取或卸载。例如,一个已经加载到ESRI Mx Extension组件的扩展功能可以随着ArcMap一起启动和关闭。

当定义一个ArcGIS程序时,你可以在普通的或用户锁定的环境下传递这些定义。普通或用户锁定的环境通常指对应的扩展功能和OEM产品。在一般环境下,你作为一名开发人员,没有控制用户环境的权利。你的定义必须与许多潜在的其他用户的定义和谐相处。这是ESRI提供的一种类型。在一个用户锁定的环境下,你作为一名开发人员,有控制软件的安装和用户在这个环境中操作的权利。

因为这个自定义机制在上述两种环境下是相同的,所以在开发一个软件时必须遵循一些规定。作为一个开发人员,如果你最初是在用户锁定环境进行自定义开发,你就不能把你的自定义传递给一般的ArcGIS用户,你必须设计一种方法来解决在锁定情况下问题。 3.4.1 一般软件的开发方法

如果你怀疑这个方法是否符合你的软件,你不能删除任何不属于你的东西。这样,一般的自定义可以作为用户ArcGIS系统的一个扩展功能。下面是创建一般自定义的规则:

? ? ? ? ?

不能删除UI组件,如按钮、工具和属性项,这些东西并不属于你。

如果过滤器是应用与一个特殊的文件,你的扩展功能不能用自定义过滤器 不可以在文件中做持续性的改变,这会让之前你保存的文件无效。 不可以异常中断文件。

如果你的扩展功能工作得到许可,你的扩展功能必须遵循IExtensionConfig并且符合ArcGIS扩展功能的惯例。更多的内容将在这一章的最后介绍。

五星文库wxphp.com包含总结汇报、考试资料、资格考试、IT计算机、党团工作、word文档、教学教材、计划方案、办公文档、文档下载以及第3章 自定义用户接口等内容。

本文共10页12345>>10