1

我正在编写一个包含旧版 MFC 富文本编辑器的 WPF 应用程序。我已将富文本编辑器包装在 HwndHost 中。HwndHost 控件位于 WPF TabControl 旁边。

在http://www.kempy.co.uk/code/Test.png运行应用程序的屏幕截图

除了我设法解决的聚焦问题和导航问题(上/下/左/右/制表符/回车)之外,我还有一个令人印象深刻的问题:

每当在面板上作为快捷键的富文本控件中键入字符时,都会激活该快捷方式,并且richedit 控件永远不会获取该字符。附上一个简单的测试项目来演示http://www.kempy.co.uk/code/Test.zip上的行为。即使富文本控件具有键盘焦点,在 Rich Edit 控件中按 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

Do you need to override OnMnemonic?

Dr Dobs article about interop...

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

于 2011-06-03T00:25:27.760 回答