我的 ActiveX 控件如何在 Internet Explorer 中接管打印、另存为、查找等?

Posted

技术标签:

【中文标题】我的 ActiveX 控件如何在 Internet Explorer 中接管打印、另存为、查找等?【英文标题】:How can my ActiveX control take over Print, Save As, Find, etc. within Internet Explorer? 【发布时间】:2009-09-15 12:25:38 【问题描述】:

我有一个 ActiveX 控件,可以在 IE 中显示给定文件格式的文档,就像 Adob​​e 有一个显示 PDF 的 ActiveX 控件一样。

我的控件是一个整页控件,就像 PDF 查看器一样 - 它使用 IE 自己的EnableFullPage mechanism 接管 IE 的整个客户区。

我想控制与文档相关的各种菜单和工具栏命令:打印、打印预览、页面设置、另存为、全选、复制、查找等。我猜肯定有一个官方的 API 可以做到这一点,因为 PDF 查看器可以做到这一点。 (请注意,打印嵌入式 ActiveX 控件 的标准机制不适用 - 我需要显示自己的打印对话框并控制整个过程,就像 PDF 查看器一样。)

(在 IE8 之前,我可以通过使用 Win32 子类侵入 IE 本身来做到这一点,这很讨厌但可以工作。但是 IE8 将选项卡内容保留在与工具栏不同的进程中,因此如果没有 DLL,这不是一个选项注入,我可以看到 Adob​​e PDF veiwer 没有这样做。这就是为什么我相信有一个官方机制。)

【问题讨论】:

【参考方案1】:

可能是DocObjects相关的一些接口,可能是IOleInPlaceFrame + IOleCommandTarget

【讨论】:

IOleInPlaceFrame 是我一直想知道的,但是我如何为托管我的控件的 Internet Explorer 实例获取一个? 我从来没有真正创建过 ActiveX 控件,所以我不知道。假设你有一个 IOleClientSite*,试试: IOleClientSite.QI(IOleInPlaceSite) 然后 IOleInPlaceSite.GetWindowContext() 应该给你 IOleInPlaceFrame【参考方案2】:

您可以使用ActiveDoc sample 作为实现Anders 建议的活动文档服务器的基础。他还指出,添加 IOleCommandTarget 可以让您控制菜单项。

【讨论】:

以上是关于我的 ActiveX 控件如何在 Internet Explorer 中接管打印、另存为、查找等?的主要内容,如果未能解决你的问题,请参考以下文章

一个或多个ActiveX 控件无法显示,原因可能是下列其中之一

如何删除ActiveX控件

事件侦听器或 onInput 命令 Internet Explorer 限制 ActiveX 控件或脚本?

消除IE提示“限制脚本或ActiveX控件”的方法

你的浏览器已经阻止此站点用不安全方式使用ActiveX控件

gis提示一个或多个activex控件无法显示