您的位置:首页 > 产品设计 > UI/UE

duilib中,子xml创建自定义控件

2015-08-05 16:42 597 查看
有时我们会遇到一个xml文档过大的困扰,这时就需要将xml文档分开来。主xml,以及多个子xml。

主xml

<?xml version="1.0" encoding="UTF-8"?>

<Window>
...

<childFrame name="child1">
...

</Window>

子xml

<?xml version="1.0" encoding="UTF-8"?>

<Window>

子xml布局,使用自定义的控件

<GameList />

</Window>

主xml对应的实现

class MainFrame : public WindowimplBase

{

...

...

virtual CreateControl(LPCTSTR pstrClass)

{
if( _tcscmp(pstrClass, _T("ConsultFrame")) == 0 ) return new ChildUI(m_PaintManager);
return NULL;

}

}

子xml对应实现

注意:当在子xml中使用自定义控件时,一定要讲m_PaintManager以引用的方式传递进来,否则childFrameUI中的静态自定义控件无法在MainFrame通过FindControl找到!

class ChildUI: public CContainerUI,public IDialogBuilderCallback

{
CConsultFrameUI(CPaintManagerUI& m_pm)
{
CDialogBuilder builder;
CContainerUI* pConsultFrame = static_cast<CContainerUI*>(builder.Create(_T("ConsultFrame.xml"), (UINT)0,this,&m_pm));
if( pConsultFrame ) {
this->Add(pConsultFrame);
}
else {
this->RemoveAll();
return;
}
}
~CConsultFrameUI(void);
virtual CControlUI* CreateControl(LPCTSTR pstrClass) 
{
if( _tcscmp(pstrClass, _T("GameList")) == 0 ) return new GameListUI;
return NULL;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  duilib