IE打印机制

我们要自己开发一个B/S下的打印控件(主要是IE下的)。首先我们要对IE的架构进行一个了解。

IExplore.exe位于最上层,他是一个很少的应用程序,当IE 装载的时候他被实例化。这个可执行程序使用IE的各种组件来执行导航,历史记录维护,收藏夹维护,HTML解析和渲染等,同时为独立的浏览器提供工具栏和框架。Iexplore是Shdocvw.dll组件的直接宿主。

Shdocvw.dll依次寄宿Mshtml.dll,当有其他的活动文档组件(例如:MS Office应用),当用户导航到这些特定的文档的时候,可以就地装入浏览器。Shdocvw.dll提供这些和导航联系在一些的功能:就地链接、收藏夹和历史记录管理、PICS支持。该动态链接库也向其宿主暴露了一些接口,以允许这些宿主可以把他当作ActiveX控件而分别寄宿。

在Shdocvw.dll中有一个接口叫做IWebBrowser2,我们所见到的IE,其实基本上就是对该接口的一个包装。他有一个很重要的成员函数"ExecWB"其原型如下:

以下是示例代码:
HRESULT ExecWB(      
    OLECMDID cmdID,
    OLECMDEXECOPT cmdexecopt,
    VARIANT *pvaIn,
    VARIANT *pvaOut
);

通过给这个函数的cmdID和cmdexecopt参数指定适当的值,我们几乎可以做IE界面上所做的所有事情。下面举例说明如何在JS中调用该函数。

以下是示例代码:
<OBJECT classid=CLSID:8856F961-340A-11D0-A96B-00C04FD705A2 height=0 id=WebBrowser width=0></OBJECT>
      <input type=”button” value=”直接打印” onclick=”browser.ExecWB(6,1);”/>
      <input type=”button” value=”打印预览” onclick=”browser.ExecWB(7,1);”/>
      <input type=”button” value=”页面设置” onclick=”browser.ExecWB(8,1);”/>

然后单击3个button,IE就会相应的执行打印,打印预览,页面设置3个动作。

这个"ExecWB"的命令实际上就是调用IOleCommandTarget接口的Exec函数,该函数的原型如下:

以下是示例代码:
HRESULT Exec(
        const GUID *pguidCmdGroup,  // Pointer to command group
          DWORD nCmdID,               // Identifier of command to execute
          DWORD nCmdExecOpt,         // Options for executing the command
          VARIANTARG *pvaIn,           // Pointer to input arguments
          VARIANTARG *pvaOut          // Pointer to command output
       );         

如果我能获得一个IWebBrowser2的实际,并且把他转换为IOleCommandTarget接口,然后给Exec函数赋予适当的值,就可以实现我们想要的结果。

这个函数的对于打印来说,第四个参数至关重要。这个参数指定的打印时使用的打印模板。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值