[原创] mfc 接收输入法中的汉字

因为hge项目需要添加一个edit,从网上找到一个hge版本的。试验了下没问题。
可是在我们项目里面是用mfc嵌套的hge, 这时候就检测不到中文输入了。
因为WM_IME_CHAR 是检测中文字符串的。  而mfc的确不能,
后来找到个方法,使用了
 
1,
import Imm32.lib
 
if (nMsg == WM_IME_COMPOSITION)
{
HIMC hIMC;
DWORD dwSize;
WCHAR lpWideStr[20];
hIMC = ImmGetContext(hWnd);
dwSize = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0);
dwSize += sizeof(WCHAR);
memset(lpWideStr, 0, 20);
//get string in Unicode
ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, lpWideStr, dwSize);
//transfer to ANSI code
int   iSize;
LPSTR   pszMultiByte;
int ChineseSimpleAcp = 936;
 
iSize = WideCharToMultiByte(ChineseSimpleAcp,0,lpWideStr,-1,NULL,0, NULL,NULL);
pszMultiByte = new char[iSize+1]/**sizeof(char)*/;
WideCharToMultiByte(ChineseSimpleAcp, 0, lpWideStr, -1, pszMultiByte, iSize, NULL, NULL );
CString strText = pszMultiByte;
delete pszMultiByte;
ImmReleaseContext(hWnd, hIMC);
return TRUE;
}
 
上面的方法可以检测由键盘输入的字符串,可是如果输入打出来, 然后由鼠标负责选择,就没了反应。。没招了,再调试调试 WM_CHAR消息吧。
原来中文输入法输入的时候也走这个消息(起码mfc对话框程序还走这个) 这样只需要拼接就行了。
 
 
2,
                if (nChar < 128)
{
szImeChar[0]=(char)nChar;   
szImeChar[1]='\0';   
}
else
{
szImeChar[0]=(char)(nChar>>8);   
szImeChar[1]=(char)nChar;
szImeChar[2]='\0';
}
 
 
void GfxEdit::InsertChar(wchar_t aChar)
{
UINT nLen = (UINT)wcslen(m_sCookie);
if (m_nCharPos < nLen)
{
while(m_nCharPos < nLen)
{
m_sCookie[nLen] = m_sCookie[nLen-1];
--nLen;
}
}
m_sCookie[m_nCharPos++] = aChar;
}

转载于:https://www.cnblogs.com/swlilike/archive/2013/04/25/3041712.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值