OGRE 1.9+MyGUI 3.2.0 中文输入法完美解决方案

来源:互联网 发布:淘宝客户端怎么看评价 编辑:程序博客网 时间:2024/06/05 21:23

1、编译OGRE v1.9

2、mygui编译选择MYGUI_SAMPLE_INPUT选择为2【非常重要】

3、修改MyGUI_src_v3-2-0\Common\Input\Win32\InputManager.cpp的方法InputManager::windowProc()

在最后一句 return 前插入以下代码

<span style="white-space:pre"></span>else if (WM_CHAR == uMsg)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>//关于中文,就交给我吧,O(∩_∩)O <span style="white-space:pre"></span>char* keyboadname = new char[8];<span style="white-space:pre"></span>GetKeyboardLayoutName(keyboadname);<span style="white-space:pre"></span>if (strcmp("00000804", keyboadname))<span style="white-space:pre"></span>{#ifndef UNICODE <span style="white-space:pre"></span>static char     s_tempChar[3] = "";<span style="white-space:pre"></span>static wchar_t  s_tempWchar[2] = L"";<span style="white-space:pre"></span>static bool s_flag = false;<span style="white-space:pre"></span>unsigned char  uch = (unsigned char)wParam;<span style="white-space:pre"></span>int scan_code = VirtualKeyToScanCode(wParam);<span style="white-space:pre"></span>if (uch >= 0xA1)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>if (!s_flag)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>s_tempChar[0] = (char)uch; //第一个字节 <span style="white-space:pre"></span>s_flag = true;<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else if (uch >= 0xA1)<span style="white-space:pre"></span>{<span style="white-space:pre"></span>s_tempChar[1] = (char)uch; //第二个字节 <span style="white-space:pre"></span>s_flag = false;<span style="white-space:pre"></span>MultiByteToWideChar(0, 0, s_tempChar, 2, s_tempWchar, 1); //转成宽字节 <span style="white-space:pre"></span>s_tempWchar[1] = L'\0';<span style="white-space:pre"></span>wchar_t code = (wchar_t)s_tempWchar[0]; //注意,标点,也是在这里输入的 <span style="white-space:pre"></span>msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)code);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else<span style="white-space:pre"></span>{<span style="white-space:pre"></span>msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)wParam);<span style="white-space:pre"></span>}<span style="white-space:pre"></span>}<span style="white-space:pre"></span>else<span style="white-space:pre"></span>{<span style="white-space:pre"></span>msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)wParam);<span style="white-space:pre"></span>}#else <span style="white-space:pre"></span>msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)text);#endif <span style="white-space:pre"></span>}<span style="white-space:pre"></span>}

4、修改MyGUI_3.2.0\Media\MyGUI_Media下的MyGUI_Fonts.xml

<?xml version="1.0" encoding="UTF-8"?>  <MyGUI type="Resource" version="1.1">  <Resource type="ResourceTrueTypeFont" name="jianti">       <Property key="Source" value="jianti.ttf"/>       <Property key="Size" value="19"/>       <Property key="Resolution" value="50"/>       <Property key="Antialias" value="false"/>       <Property key="SpaceWidth" value="4"/>       <Property key="TabWidth" value="8"/>       <Property key="CursorWidth" value="2"/>       <Property key="Distance" value="6"/>       <Property key="OffsetHeight" value="0"/>       <Codes>          <!--一般unicode码是十六进制的,这里使用的是转换为十进制的-->          <!--键盘上所有的英文字母、标点、数字-->          <Code range="33 126"/>          <!--通用标点-->          <!--单引号-->          <Code range="8216 8217"/>          <!--双引号-->          <Code range="8220 8221"/>          <!--连接号,破折号-->          <Code range="8211 8212"/>          <!--省略号-->          <Code range="8230"/>          <!--CJK标点符号-->          <!--顿号,句号-->          <Code range="12289 12290"/>          <!--单书名号,双书名号,竖版单引号,大扩号-->          <Code range="12296 12303"/>          <!--小括号-->          <Code range="12308 12309"/>          <!--中括号-->          <Code range="12304 12305"/>          <!--ASCII全角,全角中英文标点-->          <Code range="65281 65374"/>          <!--unicode汉字范围-->          <Code range="19968 40869"/>          <Code hide="128"/>          <Code hide="1026 1039"/>          <Code hide="1104"/>       </Codes>     </Resource>  <span style="white-space:pre">  </span><Resource type="ResourceTrueTypeFont" name="DejaVuSansFont.15">  <span style="white-space:pre">      </span><Property key="Source" value="DejaVuSans.ttf"/>  <span style="white-space:pre">      </span><Property key="Size" value="10"/>  <span style="white-space:pre">      </span><Codes>  <span style="white-space:pre">          </span><Code range="32 126"/>  <span style="white-space:pre">          </span><Code range="1025 1105"/>  <span style="white-space:pre">          </span><Code range="8470"/>  <span style="white-space:pre">          </span><Code hide="1026 1039"/>  <span style="white-space:pre">          </span><Code hide="1104"/>  <span style="white-space:pre">      </span></Codes>  <span style="white-space:pre">  </span></Resource>  </MyGUI> 


5、修改MyGUI_3.2.0\Media\MyGUI_Media下的MyGUI_Settings.xml

<?xml version="1.0" encoding="UTF-8"?><MyGUI><MyGUI type="Font"><Property key="Default" value="jianti"/></MyGUI><MyGUI type="Pointer"><Property key="Default" value="arrow"/><Property key="Layer" value="Pointer"/></MyGUI></MyGUI>

6、从C:\Windows\Font下复制一个字体文件到MyGUI_3.2.0\Media\MyGUI_Media下,文件名改为jianti.ttf

7、编译MYGUI v3.2.0,用自带例子享受中文吧(WIN7 64位下测试通过)

0 0
原创粉丝点击