1、问题:Ogre的SdkTray系统中Menu的Caption都是可以显示中文的。但是,Ogre的SdkTray系统中Menu条目都不能够显示中文。
Menu条目是显示文字是Ogre::TextAreaOverlayElement类显示的。该类中显示文字的设置是setCaption()函数。
setCaption()函数中设置参数为Ogre::DisplayString类的时候,可以显示中文。
例如
area->setCaption(Ogre::DisplayString(L"显示中文");
这样就可以显示中文。所以Menu的条目是能够显示中文的组件。
但是在SdkTray系统中,用于记录显示条目文字信息的变量定义如下:
Ogre::StringVector mItems;
Ogre::StringVector mItems;
2、结论:SdkTray系统中Menu有显示中文的可能性。
首先,我修改该成员变量的类型。
typedef Ogre::vector<Ogre::DisplayString>::type DisplayVector;
DisplayVector mItems;
在修改相关的其它设置函数的参数类型,例如:
void setItems(const OgreBites::DisplayVector& items)
3、编译通过后,调用方法如下:
SelectMenu* menu = mTrayMgr->createLongSelectMenu(TL_TOP, "mainMenu",Ogre::DisplayString(L"主菜单"), 120,112,10);
//添加菜单条目
OgreBites::DisplayVector itemNames;
itemNames.push_back(Ogre::DisplayString(L"打开"));
itemNames.push_back(Ogre::DisplayString(L"保存"));
menu->setItems(itemNames);
menu->show();
SdkTray系统的其它GUI控件,类似处理吧。
PS:如果中文部分没有显示。要确认一下中文字体是否载人成功。