最近在学习CEGUI,想在它里面显示中文。
在网上找了很多资料,发现这篇最好用。
在使用CEGUI中,一直没发现不能直接显示中文,后来在网上偶然看到,才发现这个问题!然后在网上google了半天,自己解决了这个问题。
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");
在需要显示中文时字符可以使用从宽字符转换成多字节:
std::wstring aa = L"退出"; //字符串可为多语言结合(如"adb123你好!")
char buffer[128] = "";
WideCharToMultiByte(CP_UTF8,0,aa.c_str(),aa.size(),buffer,sizeof(buffer),0,0);
quit->setText((CEGUI::utf8*)buffer); //设置按钮"quit"上显示中文"退出"
我的效果图: