使用可扩展对象模型 (Extensibility Object Model) 和外接程序,可有效地扩展 Visual Basic 开发环境。也可以创建 ActiveX 文档来扩展 Visual Basic IDE。与其它文档一样的开发 ActiveX 文档,但是,使用 CreateToolWindow 函数在包含 ActiveX 文档的 IDE 中创建工具窗口。
注意 该主题假设读者已经具备了某些外接程序的知识─ 外接程序是什么,以及怎样创建。如果对外接程序不熟悉,请参阅“用外接程序来扩展 Visual Basic 环境”中的“外接程序概述”和“创建基本的外接程序”。
与其它外接程序相比,使用 CreateToolWindow 函数有如下优点:
CreateToolWindow 函数是 Windows 集合的方法。该函数创建一个工具窗口─ ActiveX 文档的容器─ 并返回对该窗口的引用。下面一系列步骤列出了典型的情形:
要用 ActiveX 文档创建简单外接程序,请按照以下步骤执行:
Implements IDTExtensibility Public FormDisplayed As Boolean Public VBInstance As VBIDE.VBE Public mcbMenuCommandBar As Office.CommandBarControl Dim frmAddIn As New frmAddIn Public WithEvents MenuHandler As CommandBarEvents '
为CreateToolWindow
函数添加如下声明:Private mWin As Window
Private mobjDoc As axdUserDoc
Const guidMyTool$ = "(4244B234-E45F-12dg-8O3f-04884)"
所添加的代码声明了 CreateToolWindow 函数所必需的对象变量。Window 变量 "mWin" 被设置为该函数返回的引用;可使用该引用来显示或隐藏窗口。第二个变量 "mobjDoc" 被设置来引用 UserDocument。可使用该引用来操作 ActiveX 文档。最后,该函数用 "guidMyTool" 常数来标识窗口实例;对所创建的每个工具窗口,该字符串必须是唯一的。
Private Sub IDTExtensibility_OnConnection(ByVal VBInst As Object, ByVal ConnectMode As VBIDE.vbext_ConnectMode, ByVal AddInInst As VBIDE.AddIn, custom() As Variant)
Set mWin = AddInInst.VBE.Windows. _
CreateToolWindow(AddInInst, _
"MyAddin.axdUserDoc", _
"ActiveX Caption", guidMyTool, mobjDoc)
mWin.Visible = True
End Sub
这段代码用 Set 语句设置变量 "mWin"为对该函数创建的窗口的引用,然后,用该引用把窗口的 Visible 属性设置为 True。
理解了该函数的机制,允许创建一个更复杂的方案:从第一个窗口创建第二个窗口,并包含第二个 ActiveX 文档。
要添加第二个 ActiveX 文档,请按照以下步骤执行:
Public Property Get Text () As String
Text = Text1.Text
End Property
Public Property Let Text(ByVal newText As String)
Text1.Text = newText
End Property
前面的代码创建一个公共属性,在为文档创建窗口时将设置该属性。
Public gAddIn As vbide.Addin
新的代码行声明一个全局变量,用外接程序实例的引用来设置该变量。
Private Sub IDTExtensibility_OnConnection(ByVal _ VBInst As Object, ByVal ConnectMode As _ VBIDE.vbext_ConnectMode, ByVal AddInInst As _ VBIDE.AddIn, custom() As Variant) Set mWin = AddInInst.VBE.Windows. _ CreateToolWindow(AddInInst, _ "MyAddin.axdUserDoc", _ "ActiveX Caption", guidMyTool, mobjDoc) mWin.Visible = True '
添加下面的新代码:Set gAddIn = AddInInst
End Sub
新的行对外接程序实例设置全局变量,使它对创建更多的窗口可用。
Private mWin2 As Window
Private mDoc2 As axdUserDoc2
Const guidMyTool$ = "Xiang19X67Hangzhou4/27"
Private Sub Command1_Click()
set mWin2 = gAddIn.VBE.Windows. _
CreateToolWindow(gAddIn, _
"MyAddin.axdUserDoc2", _
"Second ActiveX Document", _
guidMyTool, mDoc2)
mWin2.Visible = True
mDoc2.Text = "This is the second document."
End Sub