Я встроил элемент управления Adobe Reader ActiveX в качестве дочернего окна в приложение MFC, но если у Reader есть фокус, ни один из ускорителей, определенных в моем приложении MFC, не сработает, независимо от того, используются они Adobe Reader или нет.,Если я встраиваю другие элементы управления ActiveX, используя тот же метод, у меня не возникает проблем с обнаружением ускорителей.
Я использовал IDE Visual Studio 2008 для создания оболочки для элемента управления ActiveX Adobe Reader (по умолчанию он называется 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 в классе, производном от CWinApp
- PreTranslateMessage в классе окна родительского окна элемента управления ActiveX
- Обработка WM_SYSCOMMAND
На самом деле я попытался установить точку останова для сообщения WM_KEYDOWN для моего ключа в цикле сообщений главного окна, и казалось, что он никогда не срабатывал, когда элемент управления ActiveX имел фокус,Я пытался использовать зацепку для клавиатуры в своем приложении, чтобы переопределить обработку клавиш элемента управления, но кажется, что он работает ненадежно - он будет работать некоторое время, но после некоторого взаимодействия, зацепка для клавиатуры полностью останавливается.
Есть идеи?Заранее спасибо.