1

我在 MFC 应用程序中嵌入了一个 Adob​​e Reader ActiveX 控件作为子窗口,但是如果 Reader 具有焦点,则不会触发我的 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 控件获得焦点时,它似乎从未被击中。我曾尝试在我的应用程序中使用键盘钩子来覆盖控件的键处理,但它似乎工作不可靠 - 它会运行一段时间,但经过一些交互后,键盘钩子会完全停止。

有任何想法吗?提前致谢。

4

1 回答 1

1

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

于 2012-01-09T15:55:35.753 回答