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位下测试通过)