CEGUI学习笔记四-- 如何输入中文
来源:互联网 发布:网络审计风险 编辑:程序博客网 时间:2024/05/03 21:55
CEGUI学习笔记四-- [转载]如何输入中文
2008.5.5
[修改] 修改了关于工具函数的命名,使上下文统一
[修改] 修改了CEGUI::System::getSingleton().injectChar(...),原文没有调用 获取单件。
感谢 richardhe@live.cn 指出了以上错误。
原贴URL:http://tb.blog.csdn.net/TrackBack.aspx?PostId=1509217(已无效)
转帖URL:http://www.cnblogs.com/yoran/archive/2008/02/15/1069388.html
这不是正统的输入法解决方案,只是通过挂载Windows的输入法处理模块来快速实现中文输入法的支持。
主要步骤我在这里摘出来了:
1、在例子工程里全解决方案搜索 “CEGUI::System::getSingleton().injectChar”,你可能会在如下的地方找到:
CEGuiOpenGLBaseApplication.cpp(379)
Win32AppHelper.cpp(100行左右吧,我已经修改了....)
如果你还包含了别的BaseApplication,可能会在别的地方找到,但是这些代码都长的很象这个样子:
CEGUI::System::getSingleton().injectChar(.....);
并且一般都会是在一个switch结构里。
2、在使用这句话的函数外面添加下面这个函数:
namespace CEGUI...{
bool _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 CEGUI::System::getSingleton().injectChar( code );
}
else
...{
return CEGUI::System::getSingleton().injectChar(code_point);
}
}
else
...{
s_flag = false;
return CEGUI::System::getSingleton().injectChar(code_point);
}
#else
return CEGUI::System::getSingleton().injectChar(code_point );
#endif
}
}
该函数进行了国标码的转换,如果不想了解规则,当工具函数用就可以了。
3、将原来的事件插入语句CEGUI::System::getSingleton().injectChar(.....); 改成:
...{
CEGUI::_injectChar(Key);
}
else
...{
CEGUI::System::getSingleton().injectChar((CEGUI::utf32)Key);
}
4、在该CPP文件头加入
#pragma comment(lib,"imm32.lib")
5、这样的话,CEGUI就可以挂载Windows的输入法处理模块了。如果你看过我上一个笔记,一定知道如何去修改scheme文件以支持显示中文。另外上述代码如果编译不通过的话,一定是命名之类的问题,耐心点修改吧,一般来说,C来的代码都需要修改才能用的。
6、编译一个有输入框的例子,比如FalagarDemo1,注意修改FalagarDemo1所使用的scheme文件。
输入看看?
7、还有一个问题就是关于BackSpace的:如果你在输入框里有字,这个时候输入法输入框里输入错了一个字符,当你按backspace的时候,CEGUI里的输入框上的字也被删了一个。这不是我们期望的行为,解决这个问题有很多途径,你可以在中间渲染层进行这些输入事件插入之前进行判断,也可以注册监听事件进行处理,但是我认为最正确的方法是在需要进行输入法输入的地方,比如EditBox的事件处理函数里特别处理backspace,当然,这需要修改CEGUIEditbox的源代码,不过这件事并不困难。
8、最近在看window 、WindowManager、system等一些CEGUI整体框架上的代码,建议和我一样刚接触CEGUI的朋友们一定要看一看源代码,这样才能了解 什么对象 具有哪些变量,分别对应了什么属性,又有什么操作。刚刚开始看的时候必然十分痛苦,但是相信我,等你从它的事件机制绕出来的时候,你的编程水平一定会发生一些改变:)
- CEGUI学习笔记四-- 如何输入中文
- CEGUI学习笔记四-- [转载]如何输入中文
- CEGUI学习笔记 -- 如何输入中文
- CEGUI学习笔记三-- 如何显示中文和中文输入 (转kun(小龙))
- CEGUI学习笔记三-- 如何显示中文
- CEGUI学习笔记三-- 如何显示中文
- [转载]CEGUI如何输入中文
- CEGUI学习笔记四-- 如何如何扩展CEGUI库 (转kun(小龙))
- cegui中文输入。。。。
- CEGUI学习笔记--如何扩展CEGUI控件库
- CEGUI学习笔记七--如何扩展CEGUI控件库
- CEGUI 中文输入的坎坎坷坷
- CEGUI学习笔记五-- 如何如何扩展CEGUI库(一)
- CEGUI学习笔记五-- 如何如何扩展CEGUI库(一)
- CEGUI学习笔记
- CEGUI中如何显示中文
- CEGUI学习笔记七--如何扩展CEGUI控件库(二)
- CEGUI学习笔记七--如何扩展CEGUI控件库(二)
- HTML特殊符号对照表
- 会议3.29
- 战争中的世外桃源--《欢迎来到东莫村》观后感
- 去除html标签
- 電子表單設計理念
- CEGUI学习笔记四-- 如何输入中文
- TIOBE编程语言流行度排行榜
- 今天开始
- JDK5新特性:格式化输出
- 关于Struts中循环显示多个数组 的补充
- 微软软件开发技术二十年回顾1985-2006
- FILETIME, SYSTEMTIME 与 time_t 相互转换
- 在tomcat中设置session过期时间
- asp.net(C#)图片随机验证码的代码!