C++ 更改使用Alt+插入的字符;CRichEdit中的Unicode
我想更改使用键盘上的Alt+unicode代码插入的unicode字符。 我使用PretranslateMessage来更改直接从键盘插入的字符,它成功了。但对于Alt+Unicode代码方法,则不是这样。 代码如下: Microsoft Word在启用显示/隐藏段落标记时具有此功能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-
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相加