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

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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值