在上文《常见的打印方法》一文中,我们已经说过,我们要自己开发一个B/S下的打印控件(主要是IE下的)。首先我们要对IE的架构进行一个了解。
学0D网12页57J5网(http://www.xwangye.com)

学0D网12页57J5网(http://www.xwangye.com)
IExplore.exe位于最上层,他是一个很少的应用程序,当IE 装载的时候他被实例化。这个可执行程序使用IE的各种组件来执行导航,历史记录维护,收藏夹维护,HTML解析和渲染等,同时为独立的浏览器提供工具栏和框架。Iexplore是Shdocvw.dll组件的直接宿主。
学0D网12页57J5网(http://www.xwangye.com)
Shdocvw.dll依次寄宿Mshtml.dll,当有其他的活动文档组件(例如:MS Office应用),当用户导航到这些特定的文档的时候,可以就地装入浏览器。Shdocvw.dll提供这些和导航联系在一些的功能:就地链接、收藏夹和历史记录管理、PICS支持。该动态链接库也向其宿主暴露了一些接口,以允许这些宿主可以把他当作ActiveX控件而分别寄宿。
学0D网12页57J5网(http://www.xwangye.com)
在Shdocvw.dll中有一个接口叫做IWebBrowser2,我们所见到的IE,其实基本上就是对该接口的一个包装。他有一个很重要的成员函数"ExecWB"其原型如下:
| 以下是示例代码: HRESULT ExecWB( OLECMDID cmdID, OLECMDEXECOPT cmdexecopt, VARIANT *pvaIn, VARIANT *pvaOut ); |
学0D网12页57J5网(http://www.xwangye.com)
通过给这个函数的cmdID和cmdexecopt参数指定适当的值,我们几乎可以做IE界面上所做的所有事情。下面举例说明如何在JS中调用该函数。
学0D网12页57J5网(http://www.xwangye.com)
| 以下是示例代码: <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个动作。
学0D网12页57J5网(http://www.xwangye.com)
大家是不是觉得与上一篇文章中说介绍有点眼熟呀?实际上是一样的。
学0D网12页57J5网(http://www.xwangye.com)
学0D网12页57J5网(http://www.xwangye.com)
这个"ExecWB"的命令实际上就是调用IOleCommandTarget接口的Exec函数,该函数的原型如下:
学0D网12页57J5网(http://www.xwangye.com)
| 以下是示例代码: 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 ); |
学0D网12页57J5网(http://www.xwangye.com)
如果我能获得一个IWebBrowser2的实际,并且把他转换为IOleCommandTarget接口,然后给Exec函数赋予适当的值,就可以实现我们想要的结果。
学0D网12页57J5网(http://www.xwangye.com)
这个函数的对于打印来说,第四个参数至关重要。这个参数指定的打印时使用的打印模板。
学0D网12页57J5网(http://www.xwangye.com)

当前 位置: 
