Adobe Reader ActiveX コントロールを子ウィンドウとして MFC アプリケーションに埋め込んでいますが、Reader にフォーカスがある場合、Adobe Reader で使用されているかどうかに関係なく、MFC アプリケーションで定義されているアクセラレータがトリガーされません。同じ方法を使用して他の 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 コントロールにフォーカスがあるときにヒットすることはありませんでした。アプリでキーボード フックを使用してコントロールのキー処理をオーバーライドしようとしましたが、動作が不安定なようです。しばらくは動作しますが、何らかの操作を行った後、キーボード フックが完全に停止します。
何か案は?前もって感謝します。