截获中文输入

在某个控件中按键时,可以获取Key值,这是键盘对应的虚拟码。如果输入的是中文,要截获中文怎么办呢?
代码如下:
先添加一个ApplicationEvents1控件和一个Label1,在其OnMessage事件中,添加如下代码:

void __fastcall TForm1::ApplicationEvents1Message(tagMSG &Msg,
      bool &Handled)
{
    if (Msg.message == WM_IME_COMPOSITION)
    {
        HIMC hIMC;
        HWND hWnd=Msg.hwnd;
        DWORD dwSize;
        WCHAR lpWideStr[20];
        if(Msg.LParam & GCS_RESULTSTR)//判断是否有空格键从输入法中取文字上屏
        {
          hIMC = ImmGetContext(hWnd);
          dwSize = ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, NULL, 0);
          dwSize += sizeof(WCHAR);
          memset(lpWideStr, 0, 20);
          //获取Unicode
          ImmGetCompositionStringW(hIMC, GCS_RESULTSTR, lpWideStr, dwSize);
          //将Unicode码转成ANSI码,此处可以用C++builder中的WideString类代替
          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 );
          String strText = pszMultiByte;
          //显示到Label1中
          Label1->Caption = Label1->Caption + strText;
          delete pszMultiByte;
          ImmReleaseContext(hWnd, hIMC);
        }
        return ;
     }
     Handled = false
}
上述代码,可以向Label1中输入中文,即使Label1具有可编辑值。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值