1

我想更改使用键盘上的 Alt+Unicode 代码插入的 unicode char。我使用 PretranslateMessage 更改直接从键盘插入的字符并且它有效。但是对于 Alt+Unicode 代码方法,它不会。这是代码:Microsoft Word 在启用显示/隐藏段落标记时具有此功能。

BOOL CEmphasizeEdit::PreTranslateMessage(MSG* msg)
{
    if (msg->hwnd == m_hWnd)
    {
        if (msg->message == WM_CHAR)
        {
            if (TheApp.Options.m_bShowWSpaceChars)
            {
                if (msg->wParam == ' ')  // This works in both cases Space key pressed or Alt + 3 + 2 in inserted
                {
                    msg->wParam = '·';
                }
                else if (msg->wParam == (unsigned char)' ') // this does not work
                {
                    msg->wParam = (unsigned char)'°'; 
                }
            }
        }
    }
    return CRichEditCtrl::PreTranslateMessage(msg);
}

如果我从键盘 Alt + 0 + 1 + 6 + 0 插入“”(无分隔符),我希望 CRichEditCtrl 显示“°”或我指定的其他字符。

我该如何处理才能使其正常工作?

4

2 回答 2

0

Alt+Space保留给程序的关闭菜单。

您应该使用另一个序列,例如Ctrl+SpaceAlt++CtrlSpace

' '并且(unsigned char)' '是同一件事,因此代码永远不会到达else if (msg->wParam == (unsigned char)' '). 你应该删除它。

用于GetAsyncKeyState查看AltCtrl键是否被按下。

BOOL IsKeyDown(int vkCode)
{
    return GetAsyncKeyState(vkCode) & 0x8000;
}

...
if (msg->wParam == ' ')
{
    if (IsKeyDown(VK_CONTROL))
        msg->wParam = L'°'; 
    else
        msg->wParam = L'+';
}
...
于 2015-09-11T14:18:51.313 回答
0

我必须让光标位置向控件发送一个附加字符串,然后在插入的字符之后设置选择。发生这种情况时,我必须跳过 CRichEditCtrl::PreTranslateMessage(msg);

BOOL CEmphasizeEdit::PreTranslateMessage(MSG* msg)
{
    if (msg->hwnd == m_hWnd)
    {
        if (msg->message == WM_CHAR)
        {
            TCHAR text[2];
            text[1] = 0x00;
            BOOL found = 1;

            switch (msg->wParam)
            {
                case 0x20: text[0] = _C('·'); break;
                case 0xA0: text[0] = 0xB0; break;
            }

            CHARRANGE cr;
            GetSel(cr);
            cr.cpMax++;
            cr.cpMin++;

            ReplaceSel(text);
            SetSel(cr);

            return 1;
        }
    }
    return CRichEditCtrl::PreTranslateMessage(msg);
}
于 2015-09-17T06:58:18.220 回答