有没有这方面经验的朋友,当当前焦点不在可编辑的文本框时,要在PreTranslateMessage中截获ctrl+shift消息,来切换输入法,代码如下:
if (((GetAsyncKeyState( VK_CONTROL ) & 0x8000)) && pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
ActivateKeyboardLayout((HKL)HKL_NEXT,KLF_SUBSTITUTE_OK); //切换输入法
HIMC hIMC;
DWORD dwConversion, dwSentence;
hIMC=ImmGetContext(m_hWnd);
ImmGetConversionStatus(hIMC,&dwConversion,&dwSentence);
if((dwConversion & IME_CMODE_LANGUAGE) != IME_CMODE_NATIVE)
{
dwConversion &= ~IME_CMODE_LANGUAGE;
dwConversion |= IME_CMODE_NATIVE;
}
if (!(dwConversion & IME_CMODE_SYMBOL)) dwConversion |= IME_CMODE_SYMBOL;
ImmSetConversionStatus(hIMC,dwConversion,dwSentence);
ImmReleaseContext(m_hWnd,hIMC);
return TRUE;
}
当执行后,能够切换输入法,但是语言栏的输入法图标和弹出的输入法不一致,比如第一输入法时搜狗,但语言栏图标却是智能ABC,当切换到智能ABC的时候,语言栏图标又变成了双拼,什么原因造成的,另外,如果把shift键改成其他的键,就不会有这个问题存在,但当切换到美式键盘时,又会存在卡死的现象,何故输入法切换问题
if (((GetAsyncKeyState( VK_CONTROL ) & 0x8000)) && pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_RETURN)
{
ActivateKeyboardLayout((HKL)HKL_NEXT,KLF_SUBSTITUTE_OK); //切换输入法
HIMC hIMC;
DWORD dwConversion, dwSentence;
hIMC=ImmGetContext(m_hWnd);
ImmGetConversionStatus(hIMC,&dwConversion,&dwSentence);
if((dwConversion & IME_CMODE_LANGUAGE) != IME_CMODE_NATIVE)
{
dwConversion &= ~IME_CMODE_LANGUAGE;
dwConversion |= IME_CMODE_NATIVE;
}
if (!(dwConversion & IME_CMODE_SYMBOL)) dwConversion |= IME_CMODE_SYMBOL;
ImmSetConversionStatus(hIMC,dwConversion,dwSentence);
ImmReleaseContext(m_hWnd,hIMC);
return TRUE;
}
当执行后,能够切换输入法,但是语言栏的输入法图标和弹出的输入法不一致,比如第一输入法时搜狗,但语言栏图标却是智能ABC,当切换到智能ABC的时候,语言栏图标又变成了双拼,什么原因造成的,另外,如果把shift键改成其他的键,就不会有这个问题存在,但当切换到美式键盘时,又会存在卡死的现象,何故输入法切换问题
http://www.yesky.com/176/1655676.shtml
if (((GetAsyncKeyState( VK_CONTROL ) & 0x8000)) && pMsg->message == WM_KEYDOWN && pMsg->wParam == VK_SHIFT)
{
ActivateKeyboardLayout((HKL)HKL_NEXT,KLF_SUBSTITUTE_OK); //切换输入法HIMC hIMC;
DWORD dwConversion, dwSentence;
hIMC=ImmGetContext(m_hWnd);
ImmGetConversionStatus(hIMC,&dwConversion,&dwSentence);if((dwConversion & IME_CMODE_LANGUAGE) != IME_CMODE_NATIVE)
{
dwConversion &= ~IME_CMODE_LANGUAGE;
dwConversion |= IME_CMODE_NATIVE;
}if (!(dwConversion & IME_CMODE_SYMBOL)) dwConversion |= IME_CMODE_SYMBOL; ImmSetConversionStatus(hIMC,dwConversion,dwSentence);
ImmReleaseContext(m_hWnd,hIMC);return TRUE;
}用CTRL+SHIFT切换时,到第三种输入法的时候图标就不一致了,如下图但如果把VK_SHIFT键换成其他的键,如ALT键,就不会有这种情况,这是什么原因哦,很奇怪