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;
}
}
主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 bkimage 属性
- 用Duilib界面库开发的一个日历控件
- duilib 开源界面库
- DUILIB多级菜单例子
- DuiLib中CTileLayoutUI的一个bug
- Duilib 快捷键实现
- Duilib 下关于Gif的使用
- Duilib 改造之路 <1> 扩展标签
- Duilib 改造之路 <2> 渲染效果 1 不打马赛克的世界
- DuiLib介绍及其消息处理剖析
- Duilib学习笔记《01》— duilib整体框架认识
- Duilib技巧:背景图片平铺
- 用duilib制作仿QQ2013动态背景登录器
- 仿酷狗音乐播放器开发日志二十——换肤功能背景图片控件的制作(附源码)
- 【1】使用DuiLib准备
- 深入浅出CChart 每日一课——快乐高四第三课 巨人的垫脚石,DirectUI之DuiLib篇
- 深入浅出CChart 每日一课——快乐高四第八课 懵懂的童年,返璞归真之Duilib窗口多区域绘图
- 视频播放器进度条的制作
- 第一个duilib程序–HelloWorld
- Duilib 事件类型定义