第3章 自定义用户接口

导读:ICommandBar接口让你用添加指令、菜单或宏的方法修改CommandBar,3.13自定义指令栏,你可以用ArcMap或ArcCatalog中的自定义对话框创建自定义文档指令栏,为了创建一个自定义工具栏,为了创建一个自定义菜单,指令栏集合用指令栏的定义来创建指令栏,一个符合IToolbarDef的类只是一个工具栏的定义,指令栏集合用在类中的工具栏定义来创建实际指令栏,符合IToolbar

第3章 自定义用户接口

用IDocument的CommandBars属性可以得到CommandBars集合的介绍。

ersiCmdBarType例举说明了指令栏的类型。用这个例举和ICommandBars::Create功能可以创建一个新的工具栏和快捷键菜单。不能用ersiCmdBarMenu功能代替它。用ICommandBars中的Find功能得到特殊指令栏的介绍。

在VBA工程中有一个为ArcMap和ArcCatalog的标准模板设计的固定模板叫做ArcID。这个模板可用来寻找固定指令和工具栏的UID。把一个指令和工具栏的名称当作主题传给ArcID,返回该项的UID。每次加载标准模板时,ArcID模板被重建;在注册处可以获得目前使用的指令和工具栏的GUID程序。

下面的代码告诉你可以用ArcID模块在ArcMap中寻找标准工具栏。

Dim pCmdBars As ICommandBars

Dim pStdBar As ICommandBar

Set pCmdBars = Application.Document.CommandBars

Set pStdBar = pCmdBars.Find(arcid.Standard_Toolbar)

ICommandBar接口让你用添加指令、菜单或宏的方法修改CommandBar。Count属性返回指令栏指令项的数目,Item属性允许你在指令索引中获得指令项的介绍。

IsVisible功能决定了当前的指令栏是否可见。

用Dock功能显示或隐藏指令栏和设置它为浮动状态和放在程序窗口中的指定位置。

esrt

DockFlags例举是与Dock功能一起返回确定指令栏放在哪里。

你可以编写VBA代码来创建custom工具栏和菜单;虽然如此,这些工具栏和菜单项只能储存在内存中,它们不能写出任何文档和模板。用ICommandBar中的Create功能来创建一个新的工具栏和快捷菜单。用ICommandBar中的CreateMenu功能来创建一个新的菜单。

用下面的VBA宏创建一个新的工具栏,在其中添加新的菜单,在菜单中添加新的选项,把工具栏在程序上面的标准工具栏下面。

Sub CreateBar()

Dim pCommandBars As ICommandBars

Dim pNewBar As ICommandBar

Dim pNewMenu As ICommandBar

Dim pCmdBars As ICommandBars

Set pCommandBars = Application.Document.CommandBars

'Create the new toolbar

Set pNewBar = pCommandBars.Create("MyToolbar", esriCmdBarTypeToolbar)

'Create the new menu on the new toolabr

Set pNewMenu = pNewBar.CreateMenu("MyMenu")

'Add an item to the menu

pNewMenu.Add arcid.File_AddData

Set pCmdBars = Application.Document.CommandBars

'Place the new toolbar at the top of the app below the Standard toolbar

pNewBar.Dock esriDockBottom, pCmdBars.Find(arcid.Standard_Toolbar) End Sub

3.13 自定义指令栏

你可以创建两种基本类型的custom指令栏,文档指令栏和组件指令栏。文档指令栏可以用程序中的固定功能性创建。组件指令栏可以通过在菜单或工具栏中用任何组件式的语言来创建并把它们编译进入ActiveDLL中。

你可以用ArcMap或ArcCatalog中的自定义对话框创建自定义文档指令栏。为了创建一个自定义工具栏,可以用工具栏中的New按钮。为了创建一个自定义菜单,可以用指令栏中的New Menu并把New Menu指令拖到任意的工具栏或菜单中。这些工具栏和菜单的种类可以储存在指定的文档或模板中并且只可以用在这个文档或模板中。

指令栏集合用指令栏的定义来创建指令栏。例如,一个符合IToolbarDef的类只是一个工具栏的定义;它实际上不是工具栏对象。一旦这个类在工具栏组件种类中注册,指令栏集合用在类中的工具栏定义来创建实际指令栏。

为了创建一个custom工具栏,符合IToolbarDef或ImenuDef接口用来定义custom工具栏的属性。你可以设置工具栏的标题和名称并说明在工具栏中有哪些指令项。

IItemDef接口定义了工具栏或菜单的指令项。在ToolbarDef和ImenuDef接口上同时用IItemDef接口和GetItemInfo功能来定义工具栏和菜单的选项。这个接口说明了指令的标识

符和它的图表类型(如果存在的话)。它也决定这个项是否在工具栏和菜单中开始一个组。

Implements IToolBarDef

Private Property Get IToolBarDef_Caption() As String

IToolBarDef_Caption = "MyToolbar"

End Property

Private Sub IToolBarDef_GetItemInfo(ByVal pos As Long, _

ByVal itemDef As esriCore.IItemDef)

Select Case pos

Case 0

itemDef.ID = "esriCore.AddDataCommand"

itemDef.Group = False

Case 1

itemDef.ID = "esriCore.FullExtentCommand"

itemDef.Group = True

End Select

End Sub

Private Property Get IToolBarDef_ItemCount() As Long

IToolBarDef_ItemCount = 2

End Property

Private Property Get IToolBarDef_Name() As String

IToolBarDef_Name = "MyToolbar"

End Property

当最终用户安装了你的custom工具栏,你可以把这个工具栏立即生效让用户不必手动去显示它。你可以添加一个注册设置让程序安装后第一次启动时工具栏自动出现。在为工具栏安装项目时,创建一个新的关键码。

在注册处中,一个自定义工具栏可以添加到Premier Toolbars。

这个关键码的名称可以时经济林的CLSID。你不必为这个关键码赋值。

最初工具栏设置只用在程序第一次启动时;如果用户随后隐藏了工具栏,在下次启动程序时,工具栏将不会出现。在启动程序后,你的最初工具栏关键码的值设为1,然后被程序忽略。

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

本文共15页1<<6789101112>>15