MyGui 的中文输入
来源:互联网 发布:战地1画面设置 优化 编辑:程序博客网 时间:2024/06/05 19:46
先说说处理中文输入的思路:
刚开始想像CEGUI那样处理中文输入,于是去看MyGUI关于输入的源代码,觉得不可行 !
想想正常输入字符的时候(没有打开输入法的时候),每输入一个字符,源代码里有个接口会进行对ascii码的翻译,
但这种翻译仅对于“English”,那汉字又怎么翻译呢? 于是想到了截取中文(详细见HookIME),既然已经做了中文显示,
我们可以自己处理所有的字符包括中文字符,而不需要大动MyGUI的源代码!
既然我们要自己处理字符,就得得到MyGUI在输入时得到的字符,于是在源代码里加了接口:
MyGUI::Char getKeyChar(void); 返回每次输入得到的字符(没有打开输入法的时候)。
剩下的就是自己处理中文输入的问题了 : )
///简单的代码如下:
bool Listener::keyPressed ( const OIS::KeyEvent &arg )
{
///打开输入法后的字符处理
if(ImmIsIME(GetKeyboardLayout(0)))
{
///中文输入及数字键输入
if(arg.key == OIS::KC_BACK)
{
GHyGuiManagerPtr->keyPressed(arg);
///得到文本光标的位置
pos = GHyGuiMainWindowPtr->getTextCursor();
///保存最新的文本
deleteText(pos);
///更新聊天框文本
GHyGuiMainWindowPtr->setText(getTextContainer());
///更新光标的位置
GHyGuiMainWindowPtr->setTextCursor(pos);
}
else if(arg.key == OIS::KC_SPACE ||
arg.key == OIS::KC_0 ||
arg.key == OIS::KC_1 ||
arg.key == OIS::KC_2 ||
arg.key == OIS::KC_3 ||
arg.key == OIS::KC_4 ||
arg.key == OIS::KC_5 ||
arg.key == OIS::KC_6 ||
arg.key == OIS::KC_7 ||
arg.key == OIS::KC_8 ||
arg.key == OIS::KC_9)
{
///保存到容器
std::string str = lpGetString();///截取中文字符串
///收集汉字字符
getTextContainer(str);
unsigned int num = 0;
///插入字符串及更新相关信息
for(VECSTR::iterator it = mCNSContainer.begin(); it != mCNSContainer.end(); ++it)
{
///得到文本光标的位置
pos = GHyGuiMainWindowPtr->getTextCursor();
///插入汉字字符串
insertText(pos + num + 1,(*it));
///更新聊天框文本
GHyGuiMainWindowPtr->setText(getTextContainer());
///更新光标的位置
GHyGuiMainWindowPtr->setTextCursor(pos + 1);
}
}
return false;
}
//////关闭输入法后的字符处理
else
{
///如果按退格键
if(arg.key == OIS::KC_BACK)
{
///继续处理按键输入(删除)
GHyGuiManagerPtr->keyPressed(arg);
///得到文本光标的位置
pos = GHyGuiMainWindowPtr->getTextCursor();
///保存最新的文本
deleteText(pos);
///更新聊天框文本
GHyGuiMainWindowPtr->setText(getTextContainer());
///更新光标的位置
GHyGuiMainWindowPtr->setTextCursor(pos);
}
else
{
///处理按键输入(插入)
GHyGuiManagerPtr->keyPressed(arg);
///得到文本光标的位置
pos = GHyGuiMainWindowPtr->getTextCursor();
///保存到容器
std::string str;
str.push_back(GHyGuiManagerPtr->getKeyChar());
///插入字符
insertText(pos,str);
///更新聊天框文本
GHyGuiMainWindowPtr->setText(getTextContainer());
///更新光标的位置
GHyGuiMainWindowPtr->setTextCursor(pos + 1);
}
}
return true;
}
- MyGui 的中文输入
- MyGui 的中文输入
- mygui中文输入及显示
- MYGUI在win7下的中文完美输入及其显示
- OSG+MyGUI结合下中文输入的若干问题
- MyGUI 的中文显示
- Mygui中文换行问题
- MyGUI中文乱码
- 解决Mygui不支持中文路径
- mygui阅读笔记(2) myGui的Delegate
- myGUi的内存泄漏
- MyGUI的align table
- MyGUI的阅读笔记(1) myGUi的单件
- mygui 与 sdktray 的比较
- mygui与luaplus的绑定
- 中文输入的收藏
- openoffice的中文输入
- 输入中文的方法
- ASP表格和表单
- Windows Mobile 6 (Smart Phone)开发基础
- [原创]修正DV拍摄时图像抖动的问题所需的算法
- Oracle产品服务和技术级别的介绍
- 补 3月4日:电子商务的一般框架
- MyGui 的中文输入
- begin to write blog here
- 程序员如何掌握计算机英语
- 关于“error LNK2005:…… already defined in”的解决办法
- M2M团队资料
- 三层架构开发中的层次划分讨论 (.net)
- delete释放空间时出错的原因!
- JAVA中的几种数据结构
- Freebsd php+mysql+apache 新手安装(源码安装!)