1. 程式人生 > >duilib 實現 XML重用(item完全重合的CList)

duilib 實現 XML重用(item完全重合的CList)

顯示 界面 call 處理 vertica create ges ica 控件

最近做一個項目,界面庫用的是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完全一致。

如此以來,界面處理上簡易了非常多,切換界面時不用去考慮界面上控件的內容,不用緩存,不用重新設置。。。

duilib 實現 XML重用(item完全重合的CList)