截取中文输入法输入的字符串,更改编码为ANSI

在全英文的XP中,在非unicode的程序中输入的中文会转为“??”。 
通过截获WM_IME_COMPOSITION消息得到输入的字符串 
ImmGetCompositionStringW得到Unicode 
WideCharToMultiByte转换为ANSI 
C++代码 
BOOL CchartestDlg::PreTranslateMessage(MSG* pMsg)  
{  
    if (pMsg->message == WM_IME_COMPOSITION)  
    {  
        HIMC hIMC;  
        HWND hWnd=pMsg->hwnd;  
        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;  
    }  
          
    return Default();     
}  
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值