最近公司要换UI界面库所以就用了duilib,因为本人之前用过但是由于时间太久没用了导致之前很多控件的使用差不多忘记了。这个帖子做个记录下次忘了可以看看。
因为duilib 这个库对扩展还是比较友好的原版提供了不少的例子可以参考,没事看看官方的例子其实也能有不少的收获。这里要说一下我用的版本是以旗舰版的基础上重新改过和封装的,所以功能上差不多。
首先我的需求其实很简单,要求每个节点上有一个COmbo控件然后加上编辑框但是由于原版的list其实并不能满足一般的需求其实,大多数 情况下咱们都需要重写list
首先duilib自定义控件有两个方式,先说原版的方式比较简单,将你自己的list继承自CListUI 实现一个参数的构造函数,参数为CPaintManagerUI& paint_manager 两个成员变量
CPaintManagerUI& m_pm;
CDialogBuilder m_dlgBuilder;
然后在初始化列表的时候给m_pm 初始化一下。接在他的父窗口中重写createControl函数
if (_tcsicmp(pstrClass, _T("FaceList")) == 0)
return new CFaceList(m_pm);
接着在addnode中开始插入节点这里
CListContainerElementUI* pListContainerElement = NULL;
if (!m_dlgBuilder.GetMarkup()->IsValid())
{
pListContainerElement = static_cast<CListContainerElementUI *>(m_dlgBuilder.Create(_T("InjectListItem.xml"), (UINT)0, NULL, &m_pM));
}
else
{
pListContainerElement = static_cast<CListContainerElementUI*> (m_dlgBuilder.Create(UINT(0), &m_pM));
}
if (pListContainerElement == NULL)
{
return false;
}
下面就跟你正常加载子控件是一样的了。