用户的目标应用程序特性对 ActiveX 文档的设计有巨大的影响。为了作出适当的响应,代码应当检查正在使用的容器。例如,如果想要在 Visual Basic 开发环境的工具窗口中查看文档,则代码应当在访问扩展性对象(在 Internet Explorer 中不可用)前检查容器。
为了确定 ActiveX 文档的容器,需和 UserDocument 的 Parent 属性一起使用 TypeName 语句。下面是一个简单示例:
Dim strContainer As String
strContainer = TypeName(UserDocument.Parent)
下面的表给出了 Internet Explorer、Microsoft Binder、和 Visual Basic 开发环境中的 CreateToolWindow 函数创建的窗口可能返回的三种字符串:
容器 | 返回的字符串 |
Internet Explorer | IwebBrowserApp |
Microsoft Binder | Section |
Window | Window |
因为不知道用户将实际使用哪种容器来查看 ActiveX 文档,所以应当为“错误的”容器(缺乏 ActiveX 文档需要的函数功能)作准备。虽然 TypeName 函数不返回容器的版本号,但它将至少允许测定容器是否确实是“错误的”。在这种情况下,应该通知用户,某些功能在该容器中是不可用的,应当使用“正确的”容器来查看该文档。
因为 ActiveX 文档被定位到容器上时发生 Show 事件,所以,最好利用该事件决定容器。然而要注意的是,无论何时显示文档,Show 事件都会发生(这种行为根据容器应用程序的不同而不同)。为了回避该问题,声明函数的一个模块级变量为标志。检验完容器后,该标志被复位。随后的 Show 事件将检查该标志,避免不必要的再次检查容器。
Option Explict Private mblnSHOWN As Boolean Private Sub UserDocument_Show() If Not mblnSHOWN Then Dim strContainer As String strContainer = TypeName(UserDocument.Type) '
用Select Case
语句测试。Select Case strContainer
Case "IwebBrowserApp"
'
支持的容器:继续打开应用程序。Case "Section"
'
支持的容器:继续打开应用程序。Case Else '
处理其它未知容器。'
不支持的容器:得体地退出。MsgBox "Sorry, please open this " & _
"document with Internet Explorer " & _
"3.0 or later."
End Select
mblnSHOWN = True '
复位标志End If
End Sub
注意 不能使用 Initialize 事件来检查容器,因为该事件发生时,文档还未定位。关于文档何时被定位的说明,请参阅本章中的“在 UserDocument 生命期中的主要事件”。