【问题标题】:How can my ActiveX control take over Print, Save As, Find, etc. within Internet Explorer?我的 ActiveX 控件如何在 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 没有这样做。这就是为什么我相信有一个官方机制。)

【问题讨论】:

    标签: internet-explorer winapi activex ole


    【解决方案1】:

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

    【讨论】:

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

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

    【讨论】:

      猜你喜欢
      • 2011-06-28
      • 1970-01-01
      • 1970-01-01
      • 2014-10-31
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-02-10
      • 1970-01-01
      相关资源
      最近更新 更多