第3章 自定义用户接口.docx

上传人:b****5 文档编号:5843351 上传时间:2023-01-01 格式:DOCX 页数:70 大小:1.56MB
下载 相关 举报
第3章 自定义用户接口.docx_第1页
第1页 / 共70页
第3章 自定义用户接口.docx_第2页
第2页 / 共70页
第3章 自定义用户接口.docx_第3页
第3页 / 共70页
第3章 自定义用户接口.docx_第4页
第4页 / 共70页
第3章 自定义用户接口.docx_第5页
第5页 / 共70页
点击查看更多>>
下载资源
资源描述

第3章 自定义用户接口.docx

《第3章 自定义用户接口.docx》由会员分享,可在线阅读,更多相关《第3章 自定义用户接口.docx(70页珍藏版)》请在冰豆网上搜索。

第3章 自定义用户接口.docx

第3章自定义用户接口

第三章:

自定义用户接口

设计ArcGIS软件是为了使用方便和强大的地理信息显示、查询和分析功能。

他们大众化的设计给广大的用户提供服务。

随着AO软件构架的形成,你就拥有了为你的商业需要自定义接口的无限空间。

你可以添加新的工具栏、按钮、工具、命令和其他的元素。

你可以通过制定命令来传递先进的功能。

你可以通过扩展功能来增强软件的功能。

你可以通过模板有选择性地传递用户信息。

这一章介绍的是软件的构造对象模型和如何利用这些对象来简单而有效地传递自定义程序。

3.1程序框架对象

3.2定义文档和模板

你可以通过定义一个可重新整理标准和添加新指令的用户接口来帮助你的用户更快捷、更有效地操作。

在AO中自定义用户的框架使你可以定义ArcMap、ArcCatalog和其他ArcGIS软件。

你可以巧妙地处理接口上的元素,例如工具栏、菜单、指令等等。

按照Windows的接口设计。

3.2.1文件和模板

不论你何时使用ArcMap软件,你必须先打开一幅图像文件。

文件储存了图像的状况、用户接口的设定和项目的视觉基础。

理解文件和模板是理解ArcGIS软件中AO定义的关键。

每一个文件和模板都包含有用户接口的固定状况、项目的视觉基础和特殊应用信息。

例如,ArcMap文件的输出编辑。

每个程序的文件和模板的结构和功能都是不同的。

因为有这种差异,最好在每个具体的程序中介绍它们。

ArcMap利用了完整的文件和模板。

3.2.2自定义ArcMap

你可以用以下几种方法自定义ArcMap:

●你可以在地理数据中添加介绍以及定义数据将如何显示。

●你可以用空间参考和辅助的绘图元素来创建一个图层。

●你可以增加、删除或重定义用户接口中的标准。

●你可以用VB编写代码应用与项目中。

所有的ArcMap中的自定义都可以储存与一个图像文件或图像模板中。

你对ArcMap桌面内容、图像的设计、工具栏和指令的修改以及你编写的VBA代码都将保存到一个图像文件中。

一个图像文件可以保存在系统中的任何地方,它的扩展名为mxd。

图像模板

如果标准模板不存在的话,ArcMap江南自动创建一个标准模板。

如果你无意识的做了一些定义,如删除工具栏和指令项,你只要删除Normal.mxt文件,然后用户接口会自动创建一个新的Normal.mxt文件。

这比撤消自定义更简单一些。

你可以用图像模板通过工程或文件在一个结构中广泛地传播用户的自定义。

图像模板是中图像文件。

在几乎所有方面,图像模板和图像文件在结构上是一致的。

功能上的不同是ArcMap把认识和使用模板当作创建新图像文件的起始点。

这与你如何在MicrosoftOffice软件中使用模板是类似的。

任何用户接口或VBA工程的自定义都是创建新图像文件的一部分。

此外,任何的模板的变化都将在下一次调用时传递给基于模板的文件。

在ArcMap中,模板和文件可分为三个级别。

你可以通过保存你的自定义到下一个级别中来确定你自定义的范围。

自定义图像文档

当你在处理一幅图像时,你给数据添加说明、设计图像的输出、定义用户接口以及编写VBA代码。

所有这些都将始终与文件相关。

用工程模板有选择性自定义

其他的工程和用户也可以使用你制定的模板。

模板可以作为一个新的图像文件的起点。

这个新的图像文件从模板中继承了你的自定义。

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

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

ArcMap中有一种特别的模板叫做标准模板,它储存了启动ArcMap需要载入的自定义用户接口。

你对标准模板做的改变将被以后打开的所有图像文件所继承。

当你在安装完ArcMap后第一次运行时,标准模板会自动创建在profiles文件夹中。

它在不同操作系统的文件的位置如下:

WindowsNT:

C:

\WINNT\Profiles\\ApplicationData\ESRI\ArcMap\Templates\

Windows2000:

C:

\DocumentsandSettings\\ApplicationData\ESRI\ArcMap\Templates\

这个缺省的标准模板包含了所有的标准工具栏、指令、放置工具栏和目录的缺省位置。

你对标准模板的定义将储存在这个文件中。

如果你希望在每次运行ArcMap时都显示这些改变,就把它们储存在标准模板中。

假设你的管理员已经定义了工具栏或工具,而且她希望每个属于该组织的人都可以使用它们。

你的管理员可以用它代替缺省标准模板。

为了实现这个目的,你的管理员可以将她自定义的标准模板文件Normal.mxt复制到以下位置:

\ArcGIS\arcexe81\bin\templatesfolder。

这样每个人使用的都是她定义的标准模板。

下面演示的是它如何工作的。

如果你在运行ArcMap时没发现有标准模板,软件会自动在以下位置中寻找\ArcGIS\arcexe81\bin\templatesfolder,如果找到,则将其复制到profiles文件夹中,并将其视做个人标准模板。

然而,你使用的并不是组织内的标准模板,而是你可自定义的模板。

如果在profiles文件夹或\ArcGIS\arcexe81\bin\templatesfolder中没有Normal.mxt文件将创建在profiles文件夹中。

3.2.3自定义ArcCatalog

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

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

●你可以用VB编写代码。

ArcCatalog并不像ArcMap那样利用整个文件和模板的结构。

ArcCatalog软件不是基于文件或基本模板;它只使用标准模板。

因此,所有ArcCatalog的自定义接口都储存在标准模板中。

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

WindowsNT:

C:

\WINNT\Profiles\\ApplicationData\ESRI\ArcCatalog\

Windows2000:

C:

\DocumentsandSettings\\ApplicationData\ESRI\ArcCatalog\

3.3Application组件类

这个程序是一个核心对象,它代表了ArcGIS软件。

通过这个软件,你可以获得属性和功能以及操纵其它元素,如文档、窗口控制和状态栏。

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

ArcMap通过ESRIArcMap对象库中的程序。

IGXApplication在第七章中介绍。

IMXApplication在第四章中介绍。

Iapplication的接口被两个程序类共用。

当ArcGIS程序运行时,一个程序对象在VBA运行。

它在所有的对象中有效,你可以用以下方法查阅程序的属性。

MsgBoxApplication.Caption

你可以在VB或其他COM语言中运行ArcMap程序。

例如,在VB中运行ArcMap创建一个新的项目,在ESRI核心库中添加一个介绍,把以下代码添加在Sub中并执行它。

Dimm_docAsIDocument

Setm_doc=NewMxDocument'startArcMap

扩展功能是个子系统可以给软件添加重要的功能。

空间分析就是个很好的例子。

VC++项目使用#import直接获取类别信息。

引入esriCore.olb可以自动在ArcGIS接口中建立“smartpointer”类。

用smartpointer可以用以下方法创立ArcMap实例:

//Example:

CreatinganinstanceofArcMap

IDocumentPtripDoc(CLSID_MxDocument);

文档包含自定义用户接口设置、VBA过程和其它设置如层和图像扩展等。

你可以打开或保存文档。

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

你可以用打开、保存和打印等功能;锁定和解锁自定义程序;显示对话框;退出程序。

ArcCatalog并不包含有创建新文件、打开文件、打印文件、打印预览和保存为文件的功能。

保存文件功能是保存标准模板而不是保存文件。

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

为了进入这个接口,在软件中运行QI。

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

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

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

IMultiThreadApplication接口有用程序注册和注销线程管理和返回程序ID的功能。

MultiThreading是指一种软件配置,可以使用执行中的独立路径。

每个线程有它自己的堆栈和它自己的CPU声明。

软件对象必须遵循IMultiThreadApplication接口,它提供了简单的注册用户线程管理对象的回应机制。

一个线程管理对象必须遵循IDllThreadManager接口。

线程管理对象可在程序关闭前被告知,所有所有当前运行的线程可以在程序关闭前退出。

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

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

IWindowPosition接口有移动和定义窗口大小的功能。

所有的窗口对象都可以在这个接口中执行。

所有的ArcGIS程序窗口可以在这个接口执行;你可以QI从程序到IWindowPosition。

左方和上方属性确定了窗口左上角在屏幕中的位置。

高度和宽度属性确定了窗口的大小,用移动功能可以同时设置这四个属性。

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

以下在标准模板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

3.4扩展ArcGIS软件

扩展功能提供了一个强大的机制,可以用来扩展ArcGIS软件的核心功能。

扩展功能可以给工具栏添加新的工具,读取事件并做出回应,展示有效特征等。

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

开发人员在软件中创建新的指令和工具时扩展功能是开发的中心部分。

通常这些指令和工具要有共同的数据或进入共同的UI组件。

扩展功能是储存数据和开发UI组件的逻辑中心。

主要的原因是每个运行的程序只有一个扩展功能的实例,而且在IApplication接口中可以给扩展功能定位并且运行它。

所有在程序中注册的扩展功能是由程序自动读取和卸载的。

用户在最后不用去读取或卸载。

例如,一个已经加载到ESRIMxExtension组件的扩展功能可以随着ArcMap一起启动和关闭。

当定义一个ArcGIS程序时,你可以在普通的或用户锁定的环境下传递这些定义。

普通或用户锁定的环境通常指对应的扩展功能和OEM产品。

在一般环境下,你作为一名开发人员,没有控制用户环境的权利。

你的定义必须与许多潜在的其他用户的定义和谐相处。

这是ESRI提供的一种类型。

在一个用户锁定的环境下,你作为一名开发人员,有控制软件的安装和用户在这个环境中操作的权利。

因为这个自定义机制在上述两种环境下是相同的,所以在开发一个软件时必须遵循一些规定。

作为一个开发人员,如果你最初是在用户锁定环境进行自定义开发,你就不能把你的自定义传递给一般的ArcGIS用户,你必须设计一种方法来解决在锁定情况下问题。

3.4.1一般软件的开发方法

如果你怀疑这个方法是否符合你的软件,你不能删除任何不属于你的东西。

这样,一般的自定义可以作为用户ArcGIS系统的一个扩展功能。

下面是创建一般自定义的规则:

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

●如果过滤器是应用与一个特殊的文件,你的扩展功能不能用自定义过滤器

●不可以在文件中做持续性的改变,这会让之前你保存的文件无效。

●不可以异常中断文件。

●如果你的扩展功能工作得到许可,你的扩展功能必须遵循IExtensionConfig并且符合ArcGIS扩展功能的惯例。

更多的内容将在这一章的最后介绍。

3.4.2锁定程序发展规则

虽然一般程序的规则都不符合创建锁定程序,但最好使你的代码在应用中无懈可击。

如果不这样,一个小的冲突也会让你的代码失败。

例如,用于锁定程序的扩展功能设计可以用自定义过滤器。

虽然如此,在使用自定义过滤器时你必须做好准备看其是否已经被使用。

下面的代码是一个试图应用自定义过滤器失败的例子:

PrivateFunctionm_pDoc_OpenDocument()AsBoolean

OnErrorGoToFilterErr

'ResettheLockwhenadocumentisopened.

m_pApp.LockCustomization"mylock",m_MyFilter

ExitFunction

FilterErr:

MsgBox"AttemptToLockDocumentWithFilterFailed",_

vbOKOnly+vbExclamation,"ExtensionError"

EndFunction

3.4.3扩展功能的创建和工作

软件对象必须符合IExtensionManager接口。

这个接口有获得特殊的扩展功能和计算有多少扩展功能将被加载的属性。

在进入程序扩展管理部分之前,先QIforIExtensionManager。

注意其他类型的对象也必须遵循IExtensionManagert。

例如,编辑工具栏是管理编辑扩展的一个扩展功能。

因此,编辑对象也遵循IExtensionManager。

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

DimpExtMgrAsIExtensionManager,pExtAsIExtension

DimiasInteger

SetpExtMgr=Application

Fori=0TopExtMgr.ExtensionCount-1

SetpExt=pExtMgr.Extension(i)

MsgBoxpExt.Name

Next

这并不能获得扩展功能的说明。

IApplicaiton接口有FindExtensionByCISID和FindExtensionAccelerators功能。

为了创建自己的扩展功能并遵循IExtension界面,你可以有选择性地遵循IExtensionConfig和IExtensionAccelerators。

IExtension接口允许你给扩展功能定义名称和说明扩展功能启动和关闭时该做什么。

下面的代码演示了如果创建一个在遇到文件事件做出行动的自定义扩展功能。

当扩展功能加载同时,一个信息框弹出当一个新的文件被创建并打开时。

ImplementsIExtension

Dimm_pAppAsIApplication

'NeedtolistenfortheMxDocumentevents

DimWithEventsm_pDocEventsAsMxDocument

PrivatePropertyGetIExtension_Name()AsString

IExtension_Name="MyExtension"

EndProperty

PrivateSubIExtension_Shutdown()

'ClearthereferencetotheApplicationandMxDocument

Setm_pApp=Nothing

Setm_pDocEvents=Nothing

Setm_pDoc=Nothing

EndSub

PrivateSubIExtension_Startup(initializationDataAsVariant)

Setm_pApp=initializationData

'StartlisteningfortheMxDocumentevents.

Setm_pDocEvents=m_pApp.Document

Setm_pDoc=m_pApp.Document

EndSub

PrivateFunctionpDoc_NewDocument()AsBoolean

MsgBox"Creatinganewdocument."

EndFunction

PrivateFunctionpDoc_OpenDocument()AsBoolean

MsgBox"Openingadocument"

EndFunction

如果你希望在扩展对话框中显示扩展功能。

你需要遵循IExtensionConfig接口。

扩展对话框中允许用户打开或关闭扩展功能。

IExtensionConfig接口在扩展对话框中提供了扩展功能的名称和描述,它也详细说明了扩展功能的状态。

扩展对话框允许你打开或关闭扩展功能。

EsriExtensionState例举是用来详细说明扩展功能是被允许、禁止或是无效。

扩展功能的状态是基于用户的。

当扩展功能安装后,它的缺省状态是未选中的,用户必须有意地在扩展对话框中选种扩展功能。

当用户在扩展对话框中选中了一个扩展功能,会发生下面的问题。

●选中的扩展功能状态被保存在注册处的用户设置中。

●扩展功能需要得到许可管理器的许可。

●如果许可是有效的,扩展功能传递的在工具栏上的工具将可以使用。

●如果许可是无效的,扩展功能传递的在工具栏上的工具将不可以使用。

此外,在扩展对话框的名称右边将显示许可无效。

当用户未在扩展对话框中选中ArcGIS扩展功能,会出现以下情况:

●扩展功能证实它并不在程序中被使用。

●如果在程序中使用了该扩展功能。

它不会让自己停留在未选中状态,而且会弹出警告消息。

●扩展功能的未选中状态将会保存在注册处的用户设置里。

●如果扩展的工具栏是活动的,适当的工具将是无效的。

●如果扩展功能让许可管理器知道它将不会在程序中用到许可证,许可管理器释放该扩展功能的许可证。

IExtensionConfig接口是与ESRI获得许可证的途径独立的,所以你作为一个开发人员可以使解决许可的问题一体化。

或者,如果你的扩展功能没有与许可管理器一起工作,你不必担心请求和释放许可。

你可以遵循IExtensionConfig来使你的扩展工具栏上的工具有效或无效。

下面的代码使取自一个类模板,它遵循IExtension展示如何使用IExtensionConfig接口。

ImplementsIExtensionConfig

Privatem_pExtStateAsesriExtensionState

PrivatePropertyGetIExtensionConfig_Description()AsString

IExtensionConfig_Description="Thisisthesampleextension."

EndProperty

PrivatePropertyLetIExtensionConfig_State(ByValRHSAs_

esriCore.esriExtensionState)

m_pExtState=RHS

EndProperty

PrivatePropertyGetIExtensionConfig_ProductName()AsString

IExtensionConfig_ProductName="SampleExtension"

EndProperty

PrivatePropertyGetIExtensionConfig_State()As_

esriCore.esriExtensionState

IExtensionConfig_State=m_pExtState

EndProperty

这个程序有一个处理ArcMap文件的特殊扩展数据的机制。

例如,有些ArcGis的扩展把它们层的类型保存在文件中。

当用户打开这样一个文件,特殊扩展层将被加载并试图创建该层。

创建该层也许会失败,这是由于以下原因:

●扩展功能未安装。

●扩展功能未在扩展对话框中安装。

●扩展功能被选中,但当前的许可无效。

在这些失败的例子中,会有警告提示你问题处在哪。

文件即被打开而没有特殊扩展层。

虽然如此,如果安装了扩展功能,在扩展对话框中被选中,就可以成功得到许可证,然后打开文件。

如果你希望扩展功能的命令拥有快捷键,你的扩展功能需要符合IExtensionAccelerators。

IExtensionAccelerators有个功能叫CreateAccelerators,可以为扩展功能创建快捷键。

只有在软件安装时创建快捷键,当新的文件被创建或当文件打开时这个功能才被使用。

快捷键和快捷键表格将在本章的后面介绍。

当你用CreateAccelerators功能把一个快捷键指配个扩展功能上的命令,确保其他的命令没有使用你将使用的关键部分。

下面的代码摘自一个类模型,它也符合extension也展示给你

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 医药卫生 > 基础医学

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1