科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件让Internet Explorer成为你的软件集成平台(二)

让Internet Explorer成为你的软件集成平台(二)

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

作为一款建立在COM基础之上的应用软件,IE系列提供了对COM技术的深度支持

作者:孙辉 来源:CSDN 2008年1月6日

关键字: 集成平台 explorer Internet Windows

  • 评论
  • 分享微博
  • 分享邮件
Microsoft Visual Basic 6.0是Microsoft的一个经典作品,尽管争议颇多,个人认为VB6是一个十分优秀的开发工具。做为一款1998年的产品,VB6至今还被许多人所喜爱,笔者就是其中之一。针对COM组件开发,VB6非常方便,但长期以来,VB6与IE插件开发却无缘无分,这一点多少有一些遗憾。作为一款建立在COM基础之上的应用软件,IE系列提供了对COM技术的深度支持,也许,这个支持的门槛过高,使得VB被拒之门外。
那么,能否建立VB6与IE开发之间的桥梁?一般而言,VB6可以十分方便的开发3类COM对象:1、简单的无UI COM对象;2、ActiveX控件;3、ActiveX Document对象。这几类对象中,前2类使用很广泛,第三种对象对一般开发者而言也许相对陌生,事实上,Microsoft的许多软件的插件往往是使用第三类对象,即基于VB的Active Document,例如Visual Studio IDE里的Tool Windows对象,就是一个典型的例子。选择这类对象,也许是因为ActiveX Document对象有完整的键盘消息控制能力。与MFC、ATL等相比,VB6的COM开发要简洁得多,例如,没有idl文件,触发事件的机制非常简单,连接事件的方式也十分清晰,VB6的“引用”机制,对COM开发的简化是无与伦比的,即使现在的.NET,也是延续早期VB的引用模式。建立IE与VB6之间的桥梁,基本是来自个人对VB6的一种偏爱,对此,也颇费苦心。从技术层面看,这个桥梁不单纯是为VB而建立的,而是针对两种极为重要的COM对象建立的,其一是ActiveX控件,另外一个就是Active Document。IE能够浏览.NET 3.0开发的WPF文档,就是采用Host ActiveX Document技术实现的。在VB环境内,开发一个Active Document非常容易,为此,我们建立一个支持VB ActiveX Document的DLL工程,取名为VBIEDoc:
经过编译后,我们得到一个已经注册的COM对象库,里包含一个ID为“VBIEDoc.IEDoc”的ActiveX Document对象。现在,我们有了一个很简单的IE“插件”了,为了能够看看这个插件如何被“裝入”IE,我们还需要一些处理工作,基本步骤如下:
1、 生产一个XML文件:
   <Tangram DocViewID="TangramLiteFormD.DocTemplate.1" DocObjID="" ExtDocObjID="TangramLiteFormExtenderD.docextender.1">
  <Window>
     <TangramNode Name="VBDoc" ID="VBIEDoc.IEDoc" CnnID="" Caption="" Width="866" Heigh="127" Tag=""></TangramNode>
  </Window>
  <TangramDoc></TangramDoc>
</Tangram>
2、 以这个XML文件为模板,用TangramDesigner生成一个xtml格式的XML文件,并将这个文件保存到一个指定的目录,建议保存到“Program Files\Tangram\BandFile”目录,这里,我们指定文件名为“testvb.xml”,并将这个文件存放在“Program Files\Tangram\BandFile”目录;
3、 在IE地址栏里输入“ie:l/l(testvb)”,我们看到如下界面:
如果输入:“ie:l/l(testvb)”我们将得到:
当然,这里得到的东西,内容是“空白”的,但我们已经成功地走过了第一步。
通过以上的步骤,我们看到,在UI级别上,类似VB6这样的工具产生的组件,是能够与IE对接的,那么,这种对接,能够与IE融合吗?以下,我们将向你展示,这种融合是完全可能的。为了实现与IE融合,我们需要所开发的对象有一个“属性”,这个属性名是:“TangramDoc”,利用VB的Wizard,很容易添加这个属性,代码如下:
Option Explicit
Dim WithEvents thisDoc As TangramLiteFormDLib.Document
Dim WithEvents thisWebBrowser As WebBrowser
 
Public Property Let TangramDoc(ByVal vNewValue As TangramLiteFormDLib.Document)
    Set thisDoc = vNewValue
    Set thisWebBrowser = thisDoc.AxObject("WebBrowser")
End Property
我们可以为文档上的button添加如下“动作”:
    Private Sub Command1_Click()
        thisWebBrowser.Navigate txtURL.Text
End Sub
重新编译上面的文档,并按上述步骤重新加载文档对象,为了测试关联性,可以在文档中输入一个URL,并按下按钮,也许你已经感觉到应该发生的事情了:
以上步骤表明,VB Document通过“引用”,可以自然地与IE交互操作,类似的,其它ActiveX控件以及ActiveX Document也可以以同样的方式实现与浏览器的UI级别的集成。
    一个比较有趣的问题是,如何组织多个VB Document(以及其它ActiveX对象)。为此,我们可以在如上的VB工程中,增加2个VB Document对象,分别命名为IEDoc1、IEDoc2,我们看如下XML描述:
<Tangram DocViewID="TangramLiteFormD.DocTemplate.1" DocObjID="" ExtDocObjID="TangramLiteFormExtenderD.docextender.1">
  <Window>
    <TangramNode Name="sp1" ID="TangramLiteTabWnd.CTangramLiteSplitterWnd" CnnID="TangramLiteTabWnd.TangramConnector" Caption="sp1" Width="" Heigh="" Tag="">
      <Row>
        <TangramNode Name="fm1" ID=" VBIEDoc.IEDoc" Width="866" Heigh="127" Tag=""></TangramNode>
      </Row>
      <Row>
        <TangramNode Name="fm2" ID=" VBIEDoc.IEDoc1" Width="866" Heigh="446" Tag=""></TangramNode>
      </Row>
    </TangramNode>
  </Window>
  <TangramDoc></TangramDoc>
</Tangram>
从描述上看,这个结构描述了一个2行1列的切分窗口,处于(1,1)位置的是ID=" VBIEDoc.IEDoc"的VB Document(你可以用其它ID值替换),处于(2,1)位置的是ID=" VBIEDoc.IEDoc1"的VB Document对象。我们可以用TangramDesigner生成对应的XTML文件,记为:testvb2.xtml,在IE地址栏里输入“ie:l/l(testvb2)”,你可以看到:
一旦多个VB对象(或者多个ActiveX)彼此可以关联,那么这些关联即可形成特定的应用。
    我们已经看到,ActiveX对象完全可以操作IE以及IE内部的DOM模型(通过引用技术,COM对象可以得到接口IHtmlDocument2,进而可以遍历DOM),那么,能否在DOM模型里操作外围的“插件”对象?这些插件对象,并不属于DOM对象集合,但由于这些对象的“多样性”,的确可能给IE提供大量的原本不具备的软件功能,一旦在“对象模型”上找到突破口,这种结合将急速促进桌面应用与Web应用相结合。我们将在以后的文章中陆续介绍如何将上述扩展对象有机的“融入”HTML的DOM模型,例如,这些对象可以与浏览器的脚本引擎完全的整合,脚本引擎可以自然的解释“外围”插件的事件,同时,外围插件也可以自如的处理HTML内部的各种操作
 
查看本文来源
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章