我的 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 中显示给定文件格式的文档,就像 Adobe 有一个显示 PDF 的 ActiveX 控件一样。
我的控件是一个整页控件,就像 PDF 查看器一样 - 它使用 IE 自己的EnableFullPage mechanism 接管 IE 的整个客户区。
我想控制与文档相关的各种菜单和工具栏命令:打印、打印预览、页面设置、另存为、全选、复制、查找等。我猜肯定有一个官方的 API 可以做到这一点,因为 PDF 查看器可以做到这一点。 (请注意,打印嵌入式 ActiveX 控件 的标准机制不适用 - 我需要显示自己的打印对话框并控制整个过程,就像 PDF 查看器一样。)
(在 IE8 之前,我可以通过使用 Win32 子类侵入 IE 本身来做到这一点,这很讨厌但可以工作。但是 IE8 将选项卡内容保留在与工具栏不同的进程中,因此如果没有 DLL,这不是一个选项注入,我可以看到 Adobe 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 控件无法显示,原因可能是下列其中之一