Adobe Reader ActiveX阻止加速器

时间:2011-05-13 05:59:30

标签: mfc activex adobe-reader

我在Adobe MFC应用程序中嵌入了Adobe Reader ActiveX控件作为子窗口,但如果Reader具有焦点,则不会触发我的MFC应用程序中定义的加速器,无论它们是否被Adobe Reader使用。如果我使用相同的方法嵌入其他ActiveX控件,我检测我的加速器没有问题。

我使用Visual Studio 2008 IDE为Adobe 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控件具有焦点时它似乎永远不会被命中。我尝试在我的应用程序中使用键盘钩子来覆盖控件的键处理,但它似乎不可靠 - 它会运行一段时间,但在一些交互之后,键盘钩完全停止。

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

1 个答案:

答案 0 :(得分:1)

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