最近想在ogre程序里添加layout,用于界面展示。
只是一个简单的layout,上面有几个简单按钮控件。
如下图:
PolygonMode下有两个互斥选项Wireframe和Solid。
具体实现过程如下:
初始化:
//线框模式的设置
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/wireframe"))->setGroupID(1);//设置该控件所属组
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/wireframe"))->setID(0);//设置该控件在组内的ID号
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/wireframe"))->setSelected(false);//设置状态没有被选择上
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/wireframe"))->subscribeEvent(
CEGUI::RadioButton::EventSelectStateChanged,
CEGUI::Event::Subscriber(&MainCeguiListener::handleShowMode, this));//设置该控件被选择上后的响应函数
//实体模式的设置
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/solid"))->setGroupID(1);
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/solid"))->setID(1);
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/solid"))->setSelected(true);
static_cast<CEGUI::RadioButton*>(CEGUI::WindowManager::getSingleton().getWindow("sanhe/Window1/Controls/solid"))->subscribeEvent(
CEGUI::RadioButton::EventSelectStateChanged,
CEGUI::Event::Subscriber(&MainCeguiListener::handleShowMode, this));
响应函数:
bool MainCeguiListener::handleShowMode(const CEGUI::EventArgs& e)
{
const CEGUI::WindowEventArgs& we = static_cast<const CEGUI::WindowEventArgs&>(e);
CEGUI::RadioButton* radio = static_cast<CEGUI::RadioButton*>(we.window);
if (radio->isSelected())
{
switch (radio->getID())
{
case 0:
mSceneMgr->getCamera("MainCamera")->setPolygonMode(PM_WIREFRAME);
break;
case 1:
mSceneMgr->getCamera("MainCamera")->setPolygonMode(PM_SOLID);
break;
default :
break;
}
}
return true;
}
呵呵,看完以后,根据自己的需求,相信大家可以用好RadioButton控件了。