把 Visual Basic IDE 作为 ActiveX 文档容器

使用可扩展对象模型 (Extensibility Object Model) 和外接程序,可有效地扩展 Visual Basic 开发环境。也可以创建 ActiveX 文档来扩展 Visual Basic IDE。与其它文档一样的开发 ActiveX 文档,但是,使用 CreateToolWindow 函数在包含 ActiveX 文档的 IDE 中创建工具窗口。

注意 该主题假设读者已经具备了某些外接程序的知识─ 外接程序是什么,以及怎样创建。如果对外接程序不熟悉,请参阅“用外接程序来扩展 Visual Basic 环境”中的“外接程序概述”和“创建基本的外接程序”。

与其它外接程序相比,使用 CreateToolWindow 函数有如下优点:

CreateToolWindow 函数

CreateToolWindow 函数是 Windows 集合的方法。该函数创建一个工具窗口─ ActiveX 文档的容器─ 并返回对该窗口的引用。下面一系列步骤列出了典型的情形:

  1. 在“外接程序”菜单上,用户单击“外接程序管理器”,然后显示出所有可用的外接程序的列表。

  2. 从该列表中,用户单击 "MyActiveXAddIn"。

  3. 外接程序创建时,发生 OnConnect 事件。

  4. 在 OnConnect 事件中,代码调用 CreateToolWindow 函数创建工具窗口。

  5. 该函数调用返回最近创建的、包含 ActiveX 文档的工具窗口的引用。

  6. 使用该引用,代码可操作工具窗口属性。例如,要显示该工具窗口,将 Visible 属性设置为 True。

要用 ActiveX 文档创建简单外接程序,请按照以下步骤执行:

  1. 在“文件”菜单上单击“新建工程”,打开“新建工程”对话框。双击“外接程序”图标创建新的外接程序工程。

  2. 单击“工程”菜单,然后单击“添加 UserDocument”打开“添加 UserDocument”对话框。双击“UserDocument”图标添加 UserDocument 到该工程中。

  3. 在“属性”窗口双击“名称”,把 UserDocument 的名称改为 "axdUserDoc"。

  4. 在“工程资源管理器”窗口双击“连接”图标,打开类模块的代码窗口。在该摸板中已经编写了相当数量的代码,只需再添加少量的代码。查看声明部分,修改为与下面的代码类似:
    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" 常数来标识窗口实例;对所创建的每个工具窗口,该字符串必须是唯一的。

  5. 在代码窗口中,向下滚动到 OnConnection 事件。将添加代码到该事件中,但为了避免混淆,先选中事件中的所有代码并删除它。然后添加如下的代码:
    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。

  6. 按 CTRL+G 键查看“立即”窗口。

  7. 键入 “AddToIni”,并按 RETURN 键。这样,就把工程的 progID 添加到 VBAddIn.ini 文件中了,这是创建外接程序的必要步骤。

  8. 按 F5 键,运行该工程。

  9. 最小化 Visual Basic 窗口。这样,启动另一个 Visual Basic 实例时可避免混淆。

  10. 启动 Visual Basic 的另一个实例。

  11. 显示“新建工程”对话框时,按 ENTER,启动一个新的标准 .exe 工程。

  12. 单击“外接程序”菜单的“外接程序管理器”,显示“外接程序管理器”对话框。

  13. 从可用外接程序的列表中,单击“My Add-In”,然后单击“确定”。现在,刚创建的 ActiveX 文档将作为 Visual Basic 开发环境的一部分显示。

  14. 查看文档后关闭它。要实现这个功能,再次打开“外接程序管理器”对话框,并清除“MyAddIn”复选框,然后单击“确定”。

添加第二个窗口

理解了该函数的机制,允许创建一个更复杂的方案:从第一个窗口创建第二个窗口,并包含第二个 ActiveX 文档。

要添加第二个 ActiveX 文档,请按照以下步骤执行:

  1. 如果还没有退出 Visual Basic 的第二个实例,则:

  2. 在“工程”菜单上单击“添加 UserDocument”,添加第二个 UserDocument 到工程中。

  3. 把 UserDocument 的名称改为 "axdUserDoc2"。

  4. 添加一个 TextBox 控件到 UserDocument 中。

  5. 双击设计器,并添加如下代码:
    Public Property Get Text () As String
    Text = Text1.Text
    End Property
    
    Public Property Let Text(ByVal newText As String)
    Text1.Text = newText
    End Property
    

    前面的代码创建一个公共属性,在为文档创建窗口时将设置该属性。

  6. 在“工程资源管理器”窗口双击“外接程序”,打开代码模块。添加如下代码到 Declarations 部分。
    Public gAddIn As vbide.Addin
    

    新的代码行声明一个全局变量,用外接程序实例的引用来设置该变量。

  7. 在“工程资源管理器”窗口双击“连接”,打开类模块。找到 OnConnect 事件,并修改为与下面的代码类似:
    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
    

    新的行对外接程序实例设置全局变量,使它对创建更多的窗口可用。

  8. 在“工程资源管理器”窗口双击“axdUserDocument”,显示其设计器。

  9. 双击工具箱的“CommandButton”图标,添加一个 CommandButton 控件到 UserDocument 中。

  10. 把按钮的标题改为 "Show Next"。

  11. 双击设计器打开其代码窗口,并添加如下代码:
    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
    
  12. 按 F5 键,运行该工程。

  13. 运行 Visual Basic 的另一个实例。

  14. 显示“新建工程”对话框时,按 ENTER 键启动一个新的标准 .exe 工程。

  15. 单击“外接程序”菜单的“外接程序管理器”,显示“外接程序管理器”对话框。

  16. 从可用外接程序的列表中,选中“My Add-In”复选框,然后单击“确定”。现在,刚创建的 ActiveX 文档将作为 Visual Basic 开发环境的一部分来显示。