【问题标题】:Adobe Reader ActiveX blocks acceleratorsAdobe Reader ActiveX 阻止加速器
【发布时间】:2011-08-24 16:11:04
【问题描述】:

我已将 Adob​​e Reader ActiveX 控件作为子窗口嵌入到 MFC 应用程序中,但如果 R​​eader 具有焦点,则不会触发我的 MFC 应用程序中定义的任何加速器,无论它们是否被 Adob​​e Reader 使用.如果我使用相同的方法嵌入其他 ActiveX 控件,我可以毫无问题地检测到我的加速器。

我已使用 Visual Studio 2008 IDE 为 Adob​​e Reader ActiveX 控件(默认称为 CAcroAXDocShim)生成包装器。在 WM_INITDIALOG 处理期间用于创建控件的代码是:

m_ctrl.Create(_T("PDF Viewer"), WS_CHILD | WS_VISIBLE | WS_CLIPSIBLINGS | WS_TABSTOP, CRect(5, 5, 400, 300), this, 1001);
m_ctrl.LoadFile(_T("C:\\auslab\\test.pdf"));

窗口出现,正确加载 PDF,工作正常,但如果 ActiveX 控件具有焦点,我无法截取键盘输入,方法是:

  • 使用加速器
  • CWinApp 派生类上的 PreTranslateMessage
  • ActiveX 控件的父窗口的窗口类上的 PreTranslateMessage
  • 处理 WM_SYSCOMMAND

事实上,我试图在 WM_KEYDOWN 消息上为我在主窗口消息循环中的键设置一个断点,当 ActiveX 控件获得焦点时,它似乎从未被击中。我尝试在我的应用程序中使用键盘钩子来覆盖控件的键处理,但它似乎工作不可靠 - 它会运行一段时间,但经过一些交互后,键盘钩子完全停止。

有什么想法吗?提前致谢。

【问题讨论】:

    标签: mfc activex adobe-reader


    【解决方案1】:

    根据下面的链接,“事件不会传递给容器。”
    http://forums.adobe.com/thread/906756

    【讨论】:

      猜你喜欢
      • 2011-06-11
      • 2014-02-11
      • 2021-02-21
      • 1970-01-01
      • 2017-09-26
      • 1970-01-01
      • 1970-01-01
      • 2010-09-09
      • 1970-01-01
      相关资源
      最近更新 更多