先来看张截图:
首先,mygui编译选择MYGUI_SAMPLE_INPUT选择为3,我们来修改common文件夹下的InputManager.cpp中的两个函数一个是LRESULT CALLBACK InputManager::windowProc(HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam)
加入以下代码
else if(WM_CHAR == uMsg)
{
//关于中文,就交给我吧,O(∩_∩)O
char* keyboadname = new char[8];
GetKeyboardLayoutName(keyboadname);
if(strcmp("00000804",keyboadname))
{
#ifndef UNICODE
static char s_tempChar[3] = "";
static wchar_t s_tempWchar[2] = L"";
static bool s_flag = false;
unsigned char uch = (unsigned char)wParam;
int scan_code = VirtualKeyToScanCode(wParam);
if( uch >= 0xA1 )
{
if( !s_flag )
{
s_tempChar[0] = (char)uch; //第一个字节
s_flag = 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';
wchar_t code = (wchar_t)s_tempWchar[0]; //注意,标点,也是在这里输入的
msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)code);
}
else
{
msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)wParam);
}
}
else
{
msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)wParam);
}
#else
msInputManager->injectKeyPress(MyGUI::KeyCode::Enum(scan_code), (MyGUI::Char)text);
#endif
}
然后在找到bool InputManager::keyPressed(const OIS::KeyEvent& _arg)修改为
bool InputManager::keyPressed(const OIS::KeyEvent& _arg)
{
char* keyboadname = new char[8];
GetKeyboardLayoutName(keyboadname);
if(!strcmp("00000804",keyboadname))
{
MyGUI::Char text = (MyGUI::Char)_arg.text;
MyGUI::KeyCode key = MyGUI::KeyCode::Enum(_arg.key);
int scan_code = key.toValue();
if (scan_code > 70 && scan_code < 84)
{
static MyGUI::Char nums[13] = { 55, 56, 57, 45, 52, 53, 54, 43, 49, 50, 51, 48, 46 };
text = nums[scan_code-71];
}
else if (key == MyGUI::KeyCode::Divide)
{
text = '/';
}
else
{
#if MYGUI_PLATFORM == MYGUI_PLATFORM_WIN32
text = (MyGUI::Char)ScanCodeToText((int)key.toValue());
#endif
}
injectKeyPress(key, text);
}
这时候你一定觉得这个东西怎么依然没有中文显示呢?你需要做出以下处理找到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="STKAITI">
<Property key="Source" value="STKAITI.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>
<Resource type="ResourceTrueTypeFont" name="DejaVuSansFont.15">
<Property key="Source" value="DejaVuSans.ttf"/>
<Property key="Size" value="10"/>
<Codes>
<Code range="32 126"/>
<Code range="1025 1105"/>
<Code range="8470"/>
<Code hide="1026 1039"/>
<Code hide="1104"/>
</Codes>
</Resource>
</MyGUI>
做完以上步骤你会觉得怎么依然无法搞定这个UI,依然不能显示中文,你要把系统盘中的字体文件拷贝到该路径下,还有,居然还有一步,好东西配置起来自然不太容易。呵呵。
当然你还要修改MyGUI_Settings.xml对默认字体进行修改这样才可以使用这个UI。改这个就好了。
<MyGUI type="Font">
<Property key="Default" value="STKAITI"/>
</MyGUI>