我在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控件具有焦点,我无法截取键盘输入,或者通过:
实际上,我试图在主窗口消息循环中为我的键设置WM_KEYDOWN消息的断点,并且当ActiveX控件具有焦点时它似乎永远不会被命中。我尝试在我的应用程序中使用键盘钩子来覆盖控件的键处理,但它似乎不可靠 - 它会运行一段时间,但在一些交互之后,键盘钩完全停止。
有什么想法吗?提前谢谢。