1

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 コントロールにフォーカスがあるときにヒットすることはありませんでした。アプリでキーボード フックを使用してコントロールのキー処理をオーバーライドしようとしましたが、動作が不安定なようです。しばらくは動作しますが、何らかの操作を行った後、キーボード フックが完全に停止します。

何か案は?前もって感謝します。

4

1 に答える 1

1

以下のリンクによると、「イベントはコンテナに渡されません。」
http://forums.adobe.com/thread/906756

于 2012-01-09T15:55:35.753 に答える