CEGUI编辑框输入中文的解决方案

           首先解决的是你要有一个支持中文的字体文件,然后模仿CEGUI的.font文件制作一个属于自己的.font文件,然后把它放进.scheme集中资源管理器中,这样在加载资源的时候就会加载自己做的.font文件了。

    下一步你需要在CEGUISystem.h里面载添加一个 _injectChar(utf32 code_point );函数

下面是函数实现:

bool System::_injectChar(utf32 code_point )
 {
#ifndef UNICODE
  static char     s_tempChar[3]  = "";
  static wchar_t  s_tempWchar[2] = L"";
  static bool s_flag = false;
  unsigned char  uch  = (unsigned char)code_point;
  if( uch >= 0xA1 )
  {
   if( !s_flag )
   {
    s_tempChar[0] = (char)uch; //第一个字节
    s_flag = true;
    return true;
   }
   else if( uch >= 0xA1 )
   {
    s_tempChar[1] = (char)uch; //第二个字节
    s_flag = false;
    MultiByteToWideChar( 0, 0, s_tempChar, 2, s_tempWchar, 1); //转成宽字节
    s_tempWchar[1] = L'/0';
    utf32 code = (utf32)s_tempWchar[0];
    //Font* fnt = System::getSingleton().getDefaultFont();
    return injectChar( code );
   }
   else
   {
    return injectChar(code_point);
   }
  }
  else
  {
   s_flag = false;
   return injectChar(code_point);
  }
#else
  return injectChar(code_point );
#endif
 }

OK,最重要的事情做完了。

下一步就是开始调用他了

if (ImmIsIME(GetKeyboardLayout(0)))
   {
    System::getSingleton()._injectChar(wParam);
   }
   else
   {
    System::getSingleton().injectChar((utf32)wParam);
   }

具体的你想要把它放到哪里我就不管了,只是还有一点要声明啊,就是在调用它的.cpp文件里面加上

#include <imm.h>
#pragma comment(lib,"imm32.lib")

大功告成,赶紧去试试吧

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值