ImageVerifierCode 换一换
格式:DOCX , 页数:70 ,大小:1.56MB ,
资源ID:5843351      下载积分:12 金币
快捷下载
登录下载
邮箱/手机:
温馨提示:
快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。 如填写123,账号就是123,密码也是123。
特别说明:
请自助下载,系统不会自动发送文件的哦; 如果您已付费,想二次下载,请登录后访问:我的下载记录
支付方式: 支付宝    微信支付   
验证码:   换一换

加入VIP,免费下载
 

温馨提示:由于个人手机设置不同,如果发现不能下载,请复制以下地址【https://www.bdocx.com/down/5843351.html】到电脑端继续下载(重复下载不扣费)。

已注册用户请登录:
账号:
密码:
验证码:   换一换
  忘记密码?
三方登录: 微信登录   QQ登录  

下载须知

1: 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。
2: 试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。
3: 文件的所有权益归上传用户所有。
4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
5. 本站仅提供交流平台,并不能对任何下载内容负责。
6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

版权提示 | 免责声明

本文(第3章 自定义用户接口.docx)为本站会员(b****5)主动上传,冰豆网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知冰豆网(发送邮件至service@bdocx.com或直接QQ联系客服),我们立即给予删除!

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

1、第3章 自定义用户接口第三章:自定义用户接口设计ArcGIS软件是为了使用方便和强大的地理信息显示、查询和分析功能。他们大众化的设计给广大的用户提供服务。随着AO软件构架的形成,你就拥有了为你的商业需要自定义接口的无限空间。你可以添加新的工具栏、按钮、工具、命令和其他的元素。你可以通过制定命令来传递先进的功能。你可以通过扩展功能来增强软件的功能。你可以通过模板有选择性地传递用户信息。这一章介绍的是软件的构造对象模型和如何利用这些对象来简单而有效地传递自定义程序。3.1 程序框架对象3.2 定义文档和模板你可以通过定义一个可重新整理标准和添加新指令的用户接口来帮助你的用户更快捷、更有效地操作。在

2、AO中自定义用户的框架使你可以定义ArcMap、ArcCatalog和其他ArcGIS软件。你可以巧妙地处理接口上的元素,例如工具栏、菜单、指令等等。按照Windows的接口设计。 3.2.1 文件和模板不论你何时使用ArcMap软件,你必须先打开一幅图像文件。文件储存了图像的状况、用户接口的设定和项目的视觉基础。理解文件和模板是理解ArcGIS软件中AO定义的关键。每一个文件和模板都包含有用户接口的固定状况、项目的视觉基础和特殊应用信息。例如,ArcMap文件的输出编辑。每个程序的文件和模板的结构和功能都是不同的。因为有这种差异,最好在每个具体的程序中介绍它们。ArcMap利用了完整的文件和

3、模板。3.2.2 自定义ArcMap你可以用以下几种方法自定义ArcMap: 你可以在地理数据中添加介绍以及定义数据将如何显示。 你可以用空间参考和辅助的绘图元素来创建一个图层。 你可以增加、删除或重定义用户接口中的标准。 你可以用VB编写代码应用与项目中。所有的ArcMap中的自定义都可以储存与一个图像文件或图像模板中。你对ArcMap桌面内容、图像的设计、工具栏和指令的修改以及你编写的VBA代码都将保存到一个图像文件中。一个图像文件可以保存在系统中的任何地方,它的扩展名为mxd。图像模板如果标准模板不存在的话,ArcMap江南自动创建一个标准模板。如果你无意识的做了一些定义,如删除工具栏和

4、指令项,你只要删除Normal.mxt文件,然后用户接口会自动创建一个新的Normal.mxt文件。这比撤消自定义更简单一些。你可以用图像模板通过工程或文件在一个结构中广泛地传播用户的自定义。图像模板是中图像文件。在几乎所有方面,图像模板和图像文件在结构上是一致的。功能上的不同是ArcMap把认识和使用模板当作创建新图像文件的起始点。这与你如何在Microsoft Office软件中使用模板是类似的。任何用户接口或VBA工程的自定义都是创建新图像文件的一部分。此外,任何的模板的变化都将在下一次调用时传递给基于模板的文件。在ArcMap中,模板和文件可分为三个级别。你可以通过保存你的自定义到下一

5、个级别中来确定你自定义的范围。自定义图像文档当你在处理一幅图像时,你给数据添加说明、设计图像的输出、定义用户接口以及编写VBA代码。所有这些都将始终与文件相关。用工程模板有选择性自定义其他的工程和用户也可以使用你制定的模板。模板可以作为一个新的图像文件的起点。这个新的图像文件从模板中继承了你的自定义。用标准模板进行完全自定义这里介绍ArcMap中三个加载的模板标准模板、工程模板和工程如何在VBA浏览器中显示。ArcMap中有一种特别的模板叫做标准模板,它储存了启动ArcMap需要载入的自定义用户接口。你对标准模板做的改变将被以后打开的所有图像文件所继承。当你在安装完ArcMap后第一次运行时,

6、标准模板会自动创建在profiles文件夹中。它在不同操作系统的文件的位置如下:Windows NT: C:WINNTProfilesApplication DataESRIArcMapTemplatesWindows 2000:C:Documents and SettingsApplication DataESRIArcMapTemplates这个缺省的标准模板包含了所有的标准工具栏、指令、放置工具栏和目录的缺省位置。你对标准模板的定义将储存在这个文件中。如果你希望在每次运行ArcMap时都显示这些改变,就把它们储存在标准模板中。假设你的管理员已经定义了工具栏或工具,而且她希望每个属于该组织

7、的人都可以使用它们。你的管理员可以用它代替缺省标准模板。为了实现这个目的,你的管理员可以将她自定义的标准模板文件Normal.mxt复制到以下位置:ArcGISarcexe81bintemplates folder。这样每个人使用的都是她定义的标准模板。下面演示的是它如何工作的。如果你在运行ArcMap时没发现有标准模板,软件会自动在以下位置中寻找ArcGISarcexe81bintemplates folder,如果找到,则将其复制到profiles文件夹中,并将其视做个人标准模板。然而,你使用的并不是组织内的标准模板,而是你可自定义的模板。如果在profiles文件夹或ArcGISarce

8、xe81bintemplates folder中没有Normal.mxt文件将创建在profiles文件夹中。3.2.3 自定义ArcCatalog你可以用以下方法自定义ArcCatalog: 你可以添加、删除或重组标准用户接口中的元素。 你可以用VB编写代码。ArcCatalog并不像ArcMap那样利用整个文件和模板的结构。ArcCatalog软件不是基于文件或基本模板;它只使用标准模板。因此,所有ArcCatalog的自定义接口都储存在标准模板中。如果在安装软件后第一次使用ArcCatalog,一个标准模板Normal.gxt会自动创建在profiles文件夹,不用操作系统下的位置如下:

9、Windows NT:C:WINNTProfilesApplication DataESRIArcCatalogWindows 2000:C:Documents and SettingsApplication DataESRIArcCatalog3.3 Application组件类这个程序是一个核心对象,它代表了ArcGIS软件。通过这个软件,你可以获得属性和功能以及操纵其它元素,如文档、窗口控制和状态栏。每一个运行的ArcGIS程序通过对象呈现出来ArcCatalog通过ESRI ArcCatalog对象库中的程序。ArcMap通过ESRI ArcMap对象库中的程序。IGXApplicat

10、ion在第七章中介绍。IMXApplication在第四章中介绍。Iapplication的接口被两个程序类共用。当ArcGIS程序运行时,一个程序对象在VBA运行。它在所有的对象中有效,你可以用以下方法查阅程序的属性。MsgBox Application.Caption你可以在VB或其他COM语言中运行ArcMap程序。例如,在VB中运行ArcMap创建一个新的项目,在ESRI核心库中添加一个介绍,把以下代码添加在Sub中并执行它。Dim m_doc As IDocumentSet m_doc = New MxDocument start ArcMap扩展功能是个子系统可以给软件添加重要的功

11、能。空间分析就是个很好的例子。VC+项目使用#import直接获取类别信息。引入esriCore.olb可以自动在ArcGIS接口中建立“smart pointer”类。用smart pointer可以用以下方法创立ArcMap实例:/ Example : Creating an instance of ArcMapIDocumentPtr ipDoc (CLSID_MxDocument);文档包含自定义用户接口设置、VBA过程和其它设置如层和图像扩展等。你可以打开或保存文档。在IApplication接口中可获得文件对象,扩展功能、状态栏对象、模板对象、目前选择的工具和VB编辑器。你可以用打

12、开、保存和打印等功能;锁定和解锁自定义程序;显示对话框;退出程序。ArcCatalog并不包含有创建新文件、打开文件、打印文件、打印预览和保存为文件的功能。保存文件功能是保存标准模板而不是保存文件。程序对象包含有IVbaApplication接口,可以允许你编辑插入、删除和运行VBA代码而不用打开VB编辑器。为了进入这个接口,在软件中运行QI。这个IVbaApplication接口有创建新的模板、在模板中插入代码、删除模板和运行macro的功能。下面是如何创建一个新的VBA模板,在模板中插入VBAmacro和运行宏的代码:Dim pVbaApp As IVbaApplicationDim s

13、As StringSet pVbaApp = ApplicationpVbaApp.CreateCodeModule Project, MyModules = Public Sub MyMacro & vbNewLine & _ Msgbox Application.Document.Title & vbNewLine & End SubpVbaApp.InsertCode Project, MyModule, spVbaApp.RunVBAMacro Project, MyModule, MyMacro, NothingIMultiThreadApplication接口有用程序注册和注销线程

14、管理和返回程序ID的功能。MultiThreading是指一种软件配置,可以使用执行中的独立路径。每个线程有它自己的堆栈和它自己的CPU声明。软件对象必须遵循IMultiThreadApplication接口,它提供了简单的注册用户线程管理对象的回应机制。一个线程管理对象必须遵循IDllThreadManager接口。线程管理对象可在程序关闭前被告知,所有所有当前运行的线程可以在程序关闭前退出。如果你开发了可以创建线程和用在ArcGIS程序进程中的组件,包含有这些组件的DLL也要遵循ThreadManager接口来注册这个线程管理对象。IDllThreadManager接口有一个OnShutd

15、own的功能可以同志DLL线程管理对象这个程序即将关闭,这样DLL线程管理可以终止这些在DLL中创建的线程。IWindowPosition接口有移动和定义窗口大小的功能。所有的窗口对象都可以在这个接口中执行。所有的ArcGIS程序窗口可以在这个接口执行;你可以QI从程序到IWindowPosition。左方和上方属性确定了窗口左上角在屏幕中的位置。高度和宽度属性确定了窗口的大小,用移动功能可以同时设置这四个属性。EsriWindowState例举了窗口是否在标准、最小或最大状态。以下在标准模板ThisDocument窗口中通常用来确定大小和位置的代码:Private Function MxDo

16、cument_NewDocument() As BooleanDim pWindPos As IWindowPositionSet pWindPos = ApplicationpWindPos.Move 10, 10, 600, 500End FunctionPrivate Function MxDocument_OpenDocument() As BooleanDim pWindPos As IWindowPositionSet pWindPos = ApplicationpWindPos.Move 10, 10, 600, 500End Function3.4 扩展ArcGIS软件扩展功能

17、提供了一个强大的机制,可以用来扩展ArcGIS软件的核心功能。扩展功能可以给工具栏添加新的工具,读取事件并做出回应,展示有效特征等。一个扩展功能提供了软件的扩展机制。开发人员在软件中创建新的指令和工具时扩展功能是开发的中心部分。通常这些指令和工具要有共同的数据或进入共同的UI组件。扩展功能是储存数据和开发UI组件的逻辑中心。主要的原因是每个运行的程序只有一个扩展功能的实例,而且在IApplication接口中可以给扩展功能定位并且运行它。所有在程序中注册的扩展功能是由程序自动读取和卸载的。用户在最后不用去读取或卸载。例如,一个已经加载到ESRI Mx Extension组件的扩展功能可以随着A

18、rcMap一起启动和关闭。当定义一个ArcGIS程序时,你可以在普通的或用户锁定的环境下传递这些定义。普通或用户锁定的环境通常指对应的扩展功能和OEM产品。在一般环境下,你作为一名开发人员,没有控制用户环境的权利。你的定义必须与许多潜在的其他用户的定义和谐相处。这是ESRI提供的一种类型。在一个用户锁定的环境下,你作为一名开发人员,有控制软件的安装和用户在这个环境中操作的权利。因为这个自定义机制在上述两种环境下是相同的,所以在开发一个软件时必须遵循一些规定。作为一个开发人员,如果你最初是在用户锁定环境进行自定义开发,你就不能把你的自定义传递给一般的ArcGIS用户,你必须设计一种方法来解决在锁

19、定情况下问题。3.4.1 一般软件的开发方法如果你怀疑这个方法是否符合你的软件,你不能删除任何不属于你的东西。这样,一般的自定义可以作为用户ArcGIS系统的一个扩展功能。下面是创建一般自定义的规则: 不能删除UI组件,如按钮、工具和属性项,这些东西并不属于你。 如果过滤器是应用与一个特殊的文件,你的扩展功能不能用自定义过滤器 不可以在文件中做持续性的改变,这会让之前你保存的文件无效。 不可以异常中断文件。 如果你的扩展功能工作得到许可,你的扩展功能必须遵循IExtensionConfig并且符合ArcGIS扩展功能的惯例。更多的内容将在这一章的最后介绍。3.4.2 锁定程序发展规则虽然一般程

20、序的规则都不符合创建锁定程序,但最好使你的代码在应用中无懈可击。如果不这样,一个小的冲突也会让你的代码失败。例如,用于锁定程序的扩展功能设计可以用自定义过滤器。虽然如此,在使用自定义过滤器时你必须做好准备看其是否已经被使用。下面的代码是一个试图应用自定义过滤器失败的例子:Private Function m_pDoc_OpenDocument() As BooleanOn Error GoTo FilterErr Reset the Lock when a document is opened.m_pApp.LockCustomization mylock, m_MyFilterExit Fu

21、nctionFilterErr:MsgBox Attempt To Lock Document With Filter Failed, _vbOKOnly + vbExclamation, Extension ErrorEnd Function3.4.3 扩展功能的创建和工作软件对象必须符合IExtensionManager接口。这个接口有获得特殊的扩展功能和计算有多少扩展功能将被加载的属性。在进入程序扩展管理部分之前,先QI for IExtensionManager。注意其他类型的对象也必须遵循IExtensionManagert。例如,编辑工具栏是管理编辑扩展的一个扩展功能。因此,编辑对

22、象也遵循IExtensionManager。这个VBA代码用程序扩展管理部分在当前加载的所有扩展功能中循环,然后报告扩展功能的名称。Dim pExtMgr As IExtensionManager, pExt As IExtensionDim i as IntegerSet pExtMgr = ApplicationFor i = 0 To pExtMgr.ExtensionCount - 1Set pExt = pExtMgr.Extension(i)MsgBox pExt.NameNext这并不能获得扩展功能的说明。IApplicaiton接口有FindExtensionByCISID和

23、FindExtensionAccelerators功能。为了创建自己的扩展功能并遵循IExtension界面,你可以有选择性地遵循IExtensionConfig和IExtensionAccelerators。IExtension接口允许你给扩展功能定义名称和说明扩展功能启动和关闭时该做什么。下面的代码演示了如果创建一个在遇到文件事件做出行动的自定义扩展功能。当扩展功能加载同时,一个信息框弹出当一个新的文件被创建并打开时。Implements IExtensionDim m_pApp As IApplication Need to listen for the MxDocument event

24、sDim WithEvents m_pDocEvents As MxDocumentPrivate Property Get IExtension_Name() As StringIExtension_Name = My ExtensionEnd PropertyPrivate Sub IExtension_Shutdown() Clear the reference to the Application and MxDocumentSet m_pApp = NothingSet m_pDocEvents = NothingSet m_pDoc = NothingEnd SubPrivate

25、Sub IExtension_Startup(initializationData As Variant)Set m_pApp = initializationDataStart listening for the MxDocument events.Set m_pDocEvents = m_pApp.DocumentSet m_pDoc = m_pApp.DocumentEnd SubPrivate Function pDoc_NewDocument() As BooleanMsgBox Creating a new document.End FunctionPrivate Function

26、 pDoc_OpenDocument() As BooleanMsgBox Opening a documentEnd Function如果你希望在扩展对话框中显示扩展功能。你需要遵循IExtensionConfig接口。扩展对话框中允许用户打开或关闭扩展功能。IExtensionConfig接口在扩展对话框中提供了扩展功能的名称和描述,它也详细说明了扩展功能的状态。扩展对话框允许你打开或关闭扩展功能。EsriExtensionState例举是用来详细说明扩展功能是被允许、禁止或是无效。扩展功能的状态是基于用户的。当扩展功能安装后,它的缺省状态是未选中的,用户必须有意地在扩展对话框中选种扩展功

27、能。当用户在扩展对话框中选中了一个扩展功能,会发生下面的问题。 选中的扩展功能状态被保存在注册处的用户设置中。 扩展功能需要得到许可管理器的许可。 如果许可是有效的,扩展功能传递的在工具栏上的工具将可以使用。 如果许可是无效的,扩展功能传递的在工具栏上的工具将不可以使用。此外,在扩展对话框的名称右边将显示许可无效。当用户未在扩展对话框中选中ArcGIS扩展功能,会出现以下情况: 扩展功能证实它并不在程序中被使用。 如果在程序中使用了该扩展功能。它不会让自己停留在未选中状态,而且会弹出警告消息。 扩展功能的未选中状态将会保存在注册处的用户设置里。 如果扩展的工具栏是活动的,适当的工具将是无效的。

28、 如果扩展功能让许可管理器知道它将不会在程序中用到许可证,许可管理器释放该扩展功能的许可证。IExtensionConfig接口是与ESRI获得许可证的途径独立的,所以你作为一个开发人员可以使解决许可的问题一体化。或者,如果你的扩展功能没有与许可管理器一起工作,你不必担心请求和释放许可。你可以遵循IExtensionConfig来使你的扩展工具栏上的工具有效或无效。下面的代码使取自一个类模板,它遵循IExtension展示如何使用IExtensionConfig接口。Implements IExtensionConfigPrivate m_pExtState As esriExtensionS

29、tatePrivate Property Get IExtensionConfig_Description() As StringIExtensionConfig_Description = This is the sample extension.End PropertyPrivate Property Let IExtensionConfig_State(ByVal RHS As _esriCore.esriExtensionState)m_pExtState = RHSEnd PropertyPrivate Property Get IExtensionConfig_ProductNam

30、e() As StringIExtensionConfig_ProductName = Sample ExtensionEnd PropertyPrivate Property Get IExtensionConfig_State() As _esriCore.esriExtensionStateIExtensionConfig_State = m_pExtStateEnd Property这个程序有一个处理ArcMap文件的特殊扩展数据的机制。例如,有些ArcGis的扩展把它们层的类型保存在文件中。当用户打开这样一个文件,特殊扩展层将被加载并试图创建该层。创建该层也许会失败,这是由于以下原因

31、: 扩展功能未安装。 扩展功能未在扩展对话框中安装。 扩展功能被选中,但当前的许可无效。在这些失败的例子中,会有警告提示你问题处在哪。文件即被打开而没有特殊扩展层。虽然如此,如果安装了扩展功能,在扩展对话框中被选中,就可以成功得到许可证,然后打开文件。如果你希望扩展功能的命令拥有快捷键,你的扩展功能需要符合IExtensionAccelerators。IExtensionAccelerators有个功能叫CreateAccelerators,可以为扩展功能创建快捷键。只有在软件安装时创建快捷键,当新的文件被创建或当文件打开时这个功能才被使用。快捷键和快捷键表格将在本章的后面介绍。当你用CreateAccelerators功能把一个快捷键指配个扩展功能上的命令,确保其他的命令没有使用你将使用的关键部分。下面的代码摘自一个类模型,它也符合extension也展示给你

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

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