在使用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);
运行结果如图: