2011-05-13 67 views
1

我已经在MFC应用程序中嵌入了一个Adobe Reader ActiveX控件作为子窗口,但是如果Reader具有焦点,则无论是否使用MFC应用程序中定义的加速器都不会触发由Adobe Reader或不是。如果我使用相同的方法嵌入其他ActiveX控件,那么检测我的加速器时没有问题。Adob​​e 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控件具有焦点,无论是由:

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

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

任何想法?提前致谢。

回答