在使用CEGUI中,一直沒發現不能直接顯示中文,後來在網上找到瞭解決方法:
1.找到一個中文字型,以微軟黑體為例:找到C:/WINDOWS/Fonts目錄下的"simhei"檔案,拷貝到Ogre字型目錄(如D:/ogre /Samples/Media/fonts)下。
2.D:/ogre/Samples/Media/gui目錄下建立一個名為"simhei-12.font"檔案,用記事本開啟,添加如下內 容:<?xml version="1.0" ?><Font Name="simhei-12" Filename="simhei.ttf" Type="FreeType" Size="12" NativeHorzRes="1024" NativeVertRes="768" AutoScaled="false" AntiAlias="true" /> (可直接複製gui目錄中"bluehighway-12.font"裡面的內容,再改Font Name 和Filename)。
3.找到Ogre程式中使用的scheme檔案(如"TaharezLookSkin.scheme"),用記事本開啟,在開關找到字型識別欄位 (如"<Font Name="BlueHighway-8" Filename="bluehighway-8.font" />"),修改或添加相同的內容"<Font Name="simhei-12" Filename="simhei-12.font" /> "。 Font Name必須和"simhei-12.font"檔案中的Font Name相同,標識使用的字型名。
4.在Ogre程式中createScene函數中使用字型。
如:mCEGUISystem->setDefaultFont((CEGUI::utf8*)"simhei- 12");
在需要顯示中文時字元可以使用從寬字元轉換成多位元組:
mList=(CEGUI::Combobox*)(FrmWnd->getChild("root/Fram1/List"));
std::wstring aa = L"中文測試"; //字串可為多語言結合(如"this is 中文!")
char buffer[128] = "";
WideCharToMultiByte(CP_UTF8,0,aa.c_str(),aa.size(),buffer,sizeof(buffer),0,0);
CEGUI::ListboxTextItem* item = new CEGUI::ListboxTextItem((CEGUI::utf8*)buffer, 0);
mList->addItem(item);
運行結果