MYGUI在win7下的中文完美输入及其显示

9 篇文章 0 订阅
3 篇文章 0 订阅

先来看张截图:


首先,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>


  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值