//通过已有的window和scenemanager创建CEGUI渲染器
//创建mRenderer实例,导入.scheme文件,设置默认鼠标指针图像和默认字体
mRenderer = new CEGUI::OgreCEGUIRenderer(mWindow, Ogre::RENDER_QUEUE_OVERLAY, false,3000, mSceneMgr);
////通过已有的CEGUI渲染器构造渲染系统
mSystem = new CEGUI::System(mRenderer);
//读入scheme文件,这里使用TaharezLookSkin,scheme文件中又关联到其他文件如font,imageset,looknfeel
CEGUI::SchemeManager::getSingleton().loadScheme((CEGUI::utf8*)"TaharezLookSkin.scheme");
mSystem->setDefaultMouseCursor((CEGUI::utf8*)"TaharezLook", (CEGUI::utf8*)"MouseArrow");
//要用到中文字,使用中文字体,simhei(黑体)是自己要添加的还要制作一个.font文件,放到相应的位置
//并在scheme文件中“调用”(添加字体选择)
mSystem->setDefaultFont((CEGUI::utf8*)"simhei-12");
/*cegui窗口界面布局有两种办法,一是手动创建,二是使用编辑器如CELayoutEditor(如图)制作layout(xml)文件
下面分别使用两种方法制作A按钮和B视图为例
/*方法一:
创建两个窗口,一个A按钮窗口,一个B视图窗口
DefaultGUISheet,TaharezLook/Button为窗口类型,有关窗口类型的知识这里不探讨
createWindow(类型,命名),A按钮名"quit",B视图名"root/viewtu"
然后设置窗口的文字和大小,窗口内可以有子窗口,"root"窗口为跟窗口
*/
//CEGUI::WindowManager *win = CEGUI::WindowManager::getSingletonPtr();
//CEGUI::Window *sheet = win->createWindow("DefaultGUISheet", "root");
////A按钮窗口
//CEGUI::Window *quit = win->createWindow("TaharezLook/Button", "quit");
//quit->setText((CEGUI::utf8*)Ogre::UTFString(L"退出").asUTF8_c_str());
//quit->setSize(CEGUI::UVector2(CEGUI::UDim(0.15,0), CEGUI::UDim(0.05, 0)));
//sheet->addChildWindow(quit);
////B视图窗口
////setProperty中使用了名为"RttImage"的纹理映射到B视图窗口中
//CEGUI::Window *si = win->createWindow((CEGUI::utf8*)"TaharezLook/StaticImage","root/viewtu");
//si->setSize(CEGUI::UVector2(CEGUI::UDim(0.25f, 0), CEGUI::UDim(0.25f, 0)));
//si->setPosition(CEGUI::UVector2(CEGUI::UDim(0.75f, 0), CEGUI::UDim(0, 0)));
////si->setProperty("Image", CEGUI::PropertyHelper::imageToString(&imageSet->getImage((CEGUI::utf8*)"RttImage")));
//sheet->addChildWindow(si);
//mSystem->setGUISheet(sheet);
/*方法二:
直接导入做好的layout文件,直接回去文件中的窗口"quit"和"Root/viewtu"(如图)
之后再进行调用,方法二相对方法一灵活方便,推荐
*/
//CEGUI::Window* sheet2 = CEGUI::WindowManager::getSingleton().loadWindowLayout((CEGUI::utf8*)"mylayout.layout");
//CEGUI::Window * textureWindow=CEGUI::WindowManager::getSingletonPtr()->getWindow("Root/viewtu");
//CEGUI::Window *quit = CEGUI::WindowManager::getSingletonPtr()->getWindow("quit");
//quit->setText((CEGUI::utf8*)Ogre::UTFString(L"退出").asUTF8_c_str());
//textureWindow->setProperty("Image", CEGUI::PropertyHelper::imageToString(&imageSet->getImage((CEGUI::utf8*)"RttImage")));
//mSystem->setGUISheet(sheet2);
//简化
//将CEGUI::WindowManager::getSingleton()值存储于窗口管理变量wmgr便于书写
CEGUI::WindowManager& wmgr = CEGUI::WindowManager::getSingleton();
//mylayout.layout文件是用CELayoutEditor制作的
//在原OGRESDK中的GUI只有TaharezLook的skin,而在CELayoutEditor还有Vanilla和WindowsLook
//也就是说DEMO中的layout都是使用TaharezLook的skin,如果要用其他的skin,还要处理将相关联的文件
//否则会出错
CEGUI::Window* sheet2 = wmgr.loadWindowLayout((CEGUI::utf8*)"myoutlay.layout");
CEGUI::Window * textureWindow=wmgr.getWindow("Root/viewtu");
CEGUI::Window *quit = wmgr.getWindow("quit");
quit->setText((CEGUI::utf8*)Ogre::UTFString(L"退出").asUTF8_c_str());
//textureWindow->setProperty("Image", CEGUI::PropertyHelper::imageToString(&imageSet->getImage((CEGUI::utf8*)"RttImage")));
mSystem->setGUISheet(sheet2);
//响应“quit”按钮,放于侦听类中,"quit"名称要对应
CEGUI::WindowManager *wmgr = CEGUI::WindowManager::getSingletonPtr();
CEGUI::Window *quit = wmgr->getWindow((CEGUI::utf8*)"quit");
quit->subscribeEvent(CEGUI::PushButton::EventClicked,
CEGUI::Event::Subscriber(&MainFrameListener::quit, this));