MyGui 的中文输入

2024-02-05 17:32
文章标签 输入 中文 mygui

本文主要是介绍MyGui 的中文输入,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

先说说处理中文输入的思路:

 

刚开始想像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 2.0

 

现在的MyGUI3.0 已经不需要这样处理了,CEGUI 怎么处理, MYGUI 也怎么处理 lucky :)

这篇关于MyGui 的中文输入的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/681656

相关文章

Java下载文件中文文件名乱码的解决方案(文件名包含很多%)

《Java下载文件中文文件名乱码的解决方案(文件名包含很多%)》Java下载文件时,文件名中文乱码问题通常是由于编码不正确导致的,使用`URLEncoder.encode(filepath,UTF-8... 目录Java下载文件中文文件名乱码问题一般情况下,大家都是这样为了解决这个问题最终解决总结Java下

Go语言实现将中文转化为拼音功能

《Go语言实现将中文转化为拼音功能》这篇文章主要为大家详细介绍了Go语言中如何实现将中文转化为拼音功能,文中的示例代码讲解详细,感兴趣的小伙伴可以跟随小编一起学习一下... 有这么一个需求:新用户入职 创建一系列账号比较麻烦,打算通过接口传入姓名进行初始化。想把姓名转化成拼音。因为有些账号即需要中文也需要英

中文分词jieba库的使用与实景应用(一)

知识星球:https://articles.zsxq.com/id_fxvgc803qmr2.html 目录 一.定义: 精确模式(默认模式): 全模式: 搜索引擎模式: paddle 模式(基于深度学习的分词模式): 二 自定义词典 三.文本解析   调整词出现的频率 四. 关键词提取 A. 基于TF-IDF算法的关键词提取 B. 基于TextRank算法的关键词提取

【测试】输入正确用户名和密码,点击登录没有响应的可能性原因

目录 一、前端问题 1. 界面交互问题 2. 输入数据校验问题 二、网络问题 1. 网络连接中断 2. 代理设置问题 三、后端问题 1. 服务器故障 2. 数据库问题 3. 权限问题: 四、其他问题 1. 缓存问题 2. 第三方服务问题 3. 配置问题 一、前端问题 1. 界面交互问题 登录按钮的点击事件未正确绑定,导致点击后无法触发登录操作。 页面可能存在

vscode中文乱码问题,注释,终端,调试乱码一劳永逸版

忘记咋回事突然出现了乱码问题,很多方法都试了,注释乱码解决了,终端又乱码,调试窗口也乱码,最后经过本人不懈努力,终于全部解决了,现在分享给大家我的方法。 乱码的原因是各个地方用的编码格式不统一,所以把他们设成统一的utf8. 1.电脑的编码格式 开始-设置-时间和语言-语言和区域 管理语言设置-更改系统区域设置-勾选Bata版:使用utf8-确定-然后按指示重启 2.vscode

解决Office Word不能切换中文输入

我们在使用WORD的时可能会经常碰到WORD中无法输入中文的情况。因为,虽然我们安装了搜狗输入法,但是到我们在WORD中使用搜狗的输入法的切换中英文的按键的时候会发现根本没有效果,无法将输入法切换成中文的。下面我就介绍一下如何在WORD中把搜狗输入法切换到中文。

当你输入一个网址后都发生什么

原文:http://igoro.com/archive/what-really-happens-when-you-navigate-to-a-url/  作为一个软件开发者,你一定会对网络应用如何工作有一个完整的层次化的认知,同样这里也包括这些应用所用到的技术:像浏览器,HTTP,HTML,网络服务器,需求处理等等。 本文将更深入的研究当你输入一个网址的时候,后台到底发生了一件件什么样的事~

sqlite不支持中文排序,采用java排序

方式一 不支持含有重复字段进行排序 /*** sqlite不支持中文排序,改用java排序* 根据指定的对象属性字段,排序对象集合,顺序* @param list* @param field* @return*/public static List sortListByField(List<?> list,String field){List temp = new ArrayList(

在 Qt Creator 中,输入 /** 并按下Enter可以自动生成 Doxygen 风格的注释

在 Qt Creator 中,当你输入 /** 时,确实会自动补全标准的 Doxygen 风格注释。这是因为 Qt Creator 支持 Doxygen 以及类似的文档注释风格,并且提供了代码自动补全功能。 以下是如何在 Qt Creator 中使用和显示这些注释标记的步骤: 1. 自动补全 Doxygen 风格注释 在 Qt Creator 中,你可以这样操作: 在你的代码中,将光标放在

彻底解决win10系统Tomcat10控制台输出中文乱码

彻底解决Tomcat10控制台输出中文乱码 首先乱码问题的原因通俗的讲就是读的编码格式和写的解码格式不一致,比如最常见的两种中文编码UTF-8和GBK,UTF-8一个汉字占三个字节,GBK一个汉字占两个字节,所以当编码与解码格式不一致时,输出端当然无法识别这是啥,所以只能以乱码代替。 值得一提的是GBK不是国家标准编码,常用的国标有两,一个是GB2312,一个是GB18030 GB1