第3章 自定义用户接口

导读:IMultiThreadApplication接口有用程序注册和注销线程管理和返,软件对象必须遵循IMultiThreadApplication接口,它提供了简单的注册用户线程管理对象的回应机制,一个线程管理对象必须遵循IDllThreadManager接口,包含有这些组件的DLL也要遵循ThreadManager接口来注册这个线程管理对,IDllThreadManager接口有一个OnShu

第3章 自定义用户接口

pVbaApp.InsertCode "Project", "MyModule", s

pVbaApp.RunVBAMacro "Project", "MyModule", "MyMacro", Nothing

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扩展功能的惯例。更多的内容将在这一章的最后介绍。

3.4.2 锁定程序发展规则

虽然一般程序的规则都不符合创建锁定程序,但最好使你的代码在应用中无懈可击。如果不这样,一个小的冲突也会让你的代码失败。例如,用于锁定程序的扩展功能设计可以用自定义过滤器。虽然如此,在使用自定义过滤器时你必须做好准备看其是否已经被使用。下面的代码是一个试图应用自定义过滤器失败的例子:

Private Function m_pDoc_OpenDocument() As Boolean

On Error GoTo FilterErr

' Reset the Lock when a document is opened.

m_pApp.LockCustomization "mylock", m_MyFilter

Exit Function

FilterErr:

MsgBox "Attempt To Lock Document With Filter Failed", _

vbOKOnly + vbExclamation, "Extension Error"

End Function

3.4.3 扩展功能的创建和工作

软件对象必须符合IExtensionManager接口。这个接口有获得特殊的扩展功能和计算有多少扩展功能将被加载的属性。

在进入程序扩展管理部分之前,先QI for IExtensionManager。注意其他类型的对象也必须遵循IExtensionManagert。例如,编辑工具栏是管理编辑扩展的一个扩展功能。因此,编辑对象也遵循IExtensionManager。

这个VBA代码用程序扩展管理部分在当前加载的所有扩展功能中循环,然后报告扩展功能的名称。

Dim pExtMgr As IExtensionManager, pExt As IExtension

Dim i as Integer

Set pExtMgr = Application

For i = 0 To pExtMgr.ExtensionCount - 1

Set pExt = pExtMgr.Extension(i)

MsgBox pExt.Name

Next

这并不能获得扩展功能的说明。IApplicaiton接口有FindExtensionByCISID和 FindExtensionAccelerators功能。为了创建自己的扩展功能并遵循IExtension界面,你可以有选择性地遵循IExtensionConfig和IExtensionAccelerators。

IExtension接口允许你给扩展功能定义名称和说明扩展功能启动和关闭时该做什么。 下面的代码演示了如果创建一个在遇到文件事件做出行动的自定义扩展功能。当扩展功能加载同时,一个信息框弹出当一个新的文件被创建并打开时。

Implements IExtension

Dim m_pApp As IApplication

' Need to listen for the MxDocument events

Dim WithEvents m_pDocEvents As MxDocument

Private Property Get IExtension_Name() As String

IExtension_Name = "My Extension"

End Property

Private Sub IExtension_Shutdown()

' Clear the reference to the Application and MxDocument

Set m_pApp = Nothing

Set m_pDocEvents = Nothing

Set m_pDoc = Nothing

End Sub

Private Sub IExtension_Startup(initializationData As Variant)

Set m_pApp = initializationData

'Start listening for the MxDocument events.

Set m_pDocEvents = m_pApp.Document

Set m_pDoc = m_pApp.Document

End Sub

Private Function pDoc_NewDocument() As Boolean

MsgBox "Creating a new document."

End Function

Private Function pDoc_OpenDocument() As Boolean

MsgBox "Opening a document"

End Function

如果你希望在扩展对话框中显示扩展功能。你需要遵循IExtensionConfig接口。扩展对话框中允许用户打开或关闭扩展功能。IExtensionConfig接口在扩展对话框中提供了扩展功能的名称和描述,它也详细说明了扩展功能的状态。

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

本文共15页123456>>15