duilib 实现 XML重用(item完全重合的CList)

最近做一个项目,界面库用的是duilib。

软件首页的左侧是一个机型列表,右侧是机型信息及其他信息,点击左侧的机型,右边跟着变为对应的信息。

由于右侧信息比较复杂,还有进度条什么的,所以如果右侧只用一个界面,切换机型时,缓存和重新填充这些信息非常麻烦。

所以就想到了,右侧使用与左侧机型一样多的界面,每个机型对应一个界面。左侧切换机型时,右侧只显示其对应的界面,其他界面隐藏。

但右侧的界面完全一致,即XML完全一致,且左侧机型数量不确定,不可能使用TabLayout控件。

并且如果一个XML被多次include,控件name重复,会导致右侧的所有界面都显示不了。

 

最终考虑使用CList,只不过这个list的所有item的位置是一样的,即item都完全重合在一起。

具体做法是:从CList派生一个CMyList,然后重写SetPos函数,

关键代码:

void CMyList::SetPos(RECT rc)

{

  CVerticalLayoutUI::SetPos(rc);

  for (int it2 = 0; it2 < m_items.GetSize(); it2++)

  {

    CControlUI* pControl = static_cast<CControlUI*>(m_items[it2]);

    if(pControl) pControl->SetPos(m_rcItem);

  }

}

 

CMainWnd::CreateControl 函数中添加:

if (_tcscmp(pstrClass, _T("MyList")) == 0)
{
pControl = new CMyList;
}

在切换界面时,只显示CMyList对应的ITEM,其他item隐藏;

其他用法与CList完全一致。

如此以来,界面处理上简易了非常多,切换界面时不用去考虑界面上控件的内容,不用缓存,不用重新设置。。。

 

转载于:https://www.cnblogs.com/pjl1119/p/7058549.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值