0

Ctrl-F をキーボード アクセラレータとして定義する MFC MDI アプリがあります。このアプリは、WinForm ダイアログをホストします。私の問題は、この子 WinForm ダイアログから Ctrl-F をキャッチしたいのですが、MFC メインフレームがそれを飲み込んでいるようです。

  • アクセラレータ テーブルで定義されていない場合、WinForm ダイアログで他のキーボード ショートカットを検出できます。
  • 編集ダイアログも MFC だった場合、このダイアログにもアクセラレータを定義してロードし、ProcessMessageFilter を使用できると思います。
  • WinFormでは、ProcessCmdKeyのオーバーライドとKeyDownイベントのリッスンの両方を試みましたが、役に立ちませんでした

WinForm の子でこれらのキーの押下を受け取る方法があると思いますか?

4

2 に答える 2

0

WinForm の子で独自のメッセージ ループを定義するとうまくいくと思います。例えば

    while(true) {
        Message m;
        GetMessage(out m);
        if (m.Msg == WM_QUIT) 
break;
        DispatchMessage(m);
      }

WinForm で CTRL + F を入力すると、メイン メッセージ ループ、つまり MFC メインフレーム アプリによってメッセージが取得され、フォーカスが WinForm にあるため、何もしないと思います。WinForm 用の独自のメッセージ ループとアクセラレータ キーがある場合は、機能する可能性があります。

于 2013-09-09T10:39:11.810 に答える