剛剛搞CEGUI的時候大體看了一下CEGUI。原以為其不支持中文。
而且網上很多人都說不支持。。我也就沒有細細看了。
當用到Editbox的時候。又不得不用中文。?這時候問題就來了。
先是用utf8方式轉換達到中文顯示的目的。可是中文輸入卻不行。網上有一種說法是將兩個字節鏈接起來即可。看了一下編譯器設置,當前使用的是多字節模式。就不得不這樣做了。不過估計我對C++還不算深。搞了一會,還是失敗了。不過后來在網上有一個朋友說CEGUI本來就支持中文的。但又看到其它人說的,不解其言啊。再后來有一個叫老妖精的網友給了我一份代碼。結果真的成功了。可顯示可輸入中文。對于中文的字表由一個font文件創建。方法如下:
1:找一個中文字體文件(.ttf)
2:創建一個文本文件,將其存為.font文件.
3:在.font文件里寫如下代碼(我個假設一個chinese.ttf文件):
<?xml version="1.0" ?>
<Font Name="chinese" Filename="chinese.TTF" Type="FreeType" Size="10" NativeHorzRes="1024" NativeVertRes="768" AutoScaled="true"/>
// 說明:Name就是在程序中要用到的名字, Filename就是文件名,FreeType可以是自定義的,具體到官方網有說明.Size就是字體的大小.程序中是不能調大小的.因為字體生成紋理后就是固定的.
4:在你寫的程序的鍵盤和事件上處理上面正常情況下是這樣子的:CEGUI::System->injectChar((CEGUI::utf32)Key); // Key值就是你程序捉到的按鍵值,我們需要將其改為:
????if (ImmIsIME(GetKeyboardLayout(0)))
????{
?????CEGUI::DbcsSupport::injectChar(Key);
????}
????else
????{
?????CEGUI::System->injectChar((CEGUI::utf32)Key);
????}
??? ImmIsIME(GetKeyboardLayout(0))目的是用于檢則現在的輸入法是否打開的。如果是在輸英文狀態我想你不會畫蛇添足的。使用這個需要imm32.lib的支持。MSDN上面也有說明。
5:最后就是添加一份代碼到你的CEGUI使用項目里,如下:
namespace CEGUI{
bool DbcsSupport::injectChar(utf32 code_point )
?{
#ifndef UNICODE
??static char???? s_tempChar[3]? = "";
??static wchar_t? s_tempWchar[2] = L"";
??static bool s_flag = false;
??unsigned char? uch? = (unsigned char)code_point;
??if( uch?>= 0xA1 )
??{
???if( !s_flag )
???{
????s_tempChar[0] = (char)uch; //第一個字節
????s_flag = true;
????return 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';
????utf32 code = (utf32)s_tempWchar[0];
????//Font* fnt = System::getSingleton().getDefaultFont();
????return CEGUI::System::getSingleton().injectChar( code );
???}
???else
???{
????return CEGUI::System::getSingleton().injectChar(code_point);
???}
??}
??else
??{
???s_flag = false;
???return CEGUI::System::getSingleton().injectChar(code_point);
??}
#else
??return CEGUI::System::getSingleton().injectChar(code_point );
#endif
?}
}
Trackback: http://tb.blog.csdn.net/TrackBack.aspx?PostId=1509217
posted on 2007-02-28 10:25
清源游民 閱讀(4124)
評論(8) 編輯 收藏 引用 所屬分類:
OGRE