1

従来の MFC リッチテキスト エディターをラップする WPF アプリを作成しています。リッチテキスト エディターを HwndHost にラップしました。HwndHost コントロールは、WPF TabControl と並んで配置されます。

http://www.kempy.co.uk/code/Test.pngで実行中のアプリのスクリーンショット

フォーカスの問題とナビゲーションの問題 (上/下/左/右/タブ/入力) は別として、私は解決できましたが、まだ 1 つのショーストップの問題があります。

パネル上のショートカット キーであるリッチ テキスト コントロールに文字が入力されると、ショートカットがアクティブになり、リッチエディット コントロールはその文字を取得しません。http://www.kempy.co.uk/code/Test.zipには、動作を実証するための簡単なテスト プロジェクトが添付されています。リッチ エディット コントロールで P または C を押すと、リッチ テキスト コントロールにキーボード フォーカスがあっても、パネルにフォーカスするか、ボタンをクリックします。

参考までに、リッチ エディット コントロールが Tab、Enter、Up、Down、Left、Right を処理できるようにするコードを次に示します。

#undef TranslateAccelerator
virtual bool TranslateAccelerator (System::Windows::Interop::MSG% msg, ModifierKeys modifiers) = IKeyboardInputSink::TranslateAccelerator
{
    AFX_MANAGE_STATE(AfxGetStaticModuleState());

    if (msg.message == WM_KEYDOWN)
    {
        // we want tabs when the rich edit is focused, send rich edit control a tab WM_CHAR 
        if (msg.wParam == (IntPtr)VK_TAB)
        {
            if (GetFocus() == m_pRichEdit->GetSafeHwnd())
            {
                m_pRichEdit->SendMessage(WM_CHAR, '\t', 0);
                return true;
            }
            else
            {
                return false;
            }
        }
        else if (
            msg.wParam == (IntPtr)VK_UP
            || msg.wParam == (IntPtr)VK_DOWN
            || msg.wParam == (IntPtr)VK_LEFT
            || msg.wParam == (IntPtr)VK_RIGHT
            || msg.wParam == (IntPtr)VK_RETURN)
        {
            // need cursor keys and enter/return, send KEYDOWN messages to rich edit control
            m_pRichEdit->SendMessage(msg.message, msg.wParam.ToInt32(), msg.lParam.ToInt32());
            return true;
        }

    }
    return false;
}
4

1 に答える 1

0

OnMnemonicをオーバーライドする必要がありますか?

相互運用に関するドブス博士の記事...

http://drdobbs.com/windows/197003872?pgno=3

于 2011-06-03T00:25:27.760 に答える