C++ 更改使用Alt+插入的字符;CRichEdit中的Unicode

C++ 更改使用Alt+插入的字符;CRichEdit中的Unicode,c++,mfc,windows-messages,cricheditctrl,crichedit,C++,Mfc,Windows Messages,Cricheditctrl,Crichedit,我想更改使用键盘上的Alt+unicode代码插入的unicode字符。 我使用PretranslateMessage来更改直接从键盘插入的字符,它成功了。但对于Alt+Unicode代码方法,则不是这样。 代码如下: Microsoft Word在启用显示/隐藏段落标记时具有此功能 BOOL CEmphasizeEdit::PreTranslateMessage(MSG* msg) { if (msg->hwnd == m_hWnd) { if (msg-

我想更改使用键盘上的Alt+unicode代码插入的unicode字符。 我使用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显示“°”或我指定的另一个字符

如何处理此问题以使其正常工作?

Alt+空间保留给程序的关闭菜单

您应该使用另一个序列,如Ctrl+Space或Alt+Ctrl+Space

'
(unsigned char)'
是同一件事,因此如果(msg->wParam==(unsigned char)'),代码永远不会到达
。你应该把它去掉

使用
GetAsyncKeyState
查看是否按下了
Alt
Ctrl

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

...
if (msg->wParam == ' ')
{
    if (IsKeyDown(VK_CONTROL))
        msg->wParam = L'°'; 
    else
        msg->wParam = L'+';
}
...
Alt+空间是为程序的关闭菜单保留的

您应该使用另一个序列,如Ctrl+Space或Alt+Ctrl+Space

'
(unsigned char)'
是同一件事,因此如果(msg->wParam==(unsigned char)'),代码永远不会到达
。你应该把它去掉

使用
GetAsyncKeyState
查看是否按下了
Alt
Ctrl

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

...
if (msg->wParam == ' ')
{
    if (IsKeyDown(VK_CONTROL))
        msg->wParam = L'°'; 
    else
        msg->wParam = L'+';
}
...

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


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


Word并不是这样实现该功能的。它不修改文档内容。它只是改变了内容的显示方式。是的,我只想修改它的显示方式。这就是我想重定向插入字符的原因。Word不是这样实现该功能的。它不修改文档内容。它只是改变了内容的显示方式。是的,我只想修改它的显示方式。这就是为什么我要重定向插入的字符。PretranslateMessage+WM_char检索使用Alt+unicode代码方法(例如:Alt+9+7,即“a”)插入的unicode字符,但更改它没有任何效果。现在您尝试执行的操作很有意义。您希望使用键盘快捷键输入unicode字符。编辑您的问题,并在问题中对此进行解释。删除对“更改unicode字符”的引用,因为这不是同一件事。是的,我想检查使用键盘快捷键插入的unicode字符,如果它有一个特定值,那么我想用另一个值来更改它。使用
IsKeyDown(VK_菜单)
检查Alt键是否已按下。监视按下了哪些键,使用数学添加数字9*10+7=97PretranslateMessage+WM_CHAR检索使用Alt+unicode编码方法插入的unicode字符(例如:Alt+9+7,即“a”),但更改它没有任何效果。现在您尝试的操作是有意义的。您希望使用键盘快捷键输入unicode字符。编辑您的问题,并在问题中对此进行解释。删除对“更改unicode字符”的引用,因为这不是同一件事。是的,我想检查使用键盘快捷键插入的unicode字符,如果它有一个特定值,那么我想用另一个值来更改它。使用
IsKeyDown(VK_菜单)
检查Alt键是否已按下。监控按下的键,使用数学将数字9*10+7=97相加