轉載請說明出處,謝謝~~:http://blog.csdn.net/zhuhongshu/article/details/42264947函數
這個bug我在仿酷狗開發日誌裏提到過,不事後來發現修復的不夠好,後來從新修改了代碼,並記錄到博客。ui
問題描述:spa
在仿酷狗程序中,動態添加音樂項目到播放列表裏,這是必須的功能,動態添加的功能已經作好。可是我發現,當一個分組本來在收縮狀態下,這是給它動態添加音樂項目就會發生很搞笑的問題:分組是收縮狀態,而動態添加的項目卻顯示了出來,如圖:.net
能夠看到,一共有20個音樂項目,本來的10個已經在收縮狀態下因此沒有顯示,而新添加的項目卻直接顯示了出來。這裏應該有兩種處理邏輯:日誌
1)動態添加子項目時,發現分組處於收縮狀態後,新添加的項目自動隱藏而不顯示出來code
2)動態添加子項目時,發現分組處於展開狀態後,新添加的項目自動展開blog
修復這個bug只要,在CTreeNodeUI添加元素時進行判斷,控制新加元素的顯示隱藏屬性就能夠了。修改CTreeNodeUI的AddAt和AddChildNode函數。修改後的函數以下:開發
bool CTreeNodeUI::AddAt( CControlUI* pControl, int iIndex ) { if (!pControl) return false; //省略多餘代碼···· else { //parent TreeNode not bind TreeView just insert to parent TreeNode bRet = mTreeNodes.InsertAt(iIndex, pControl); } if(bRet) //add by redrain 2014.11.7 { pControl->SetVisible(GetFolderButton()->IsSelected()); } return bRet; }
bool CTreeNodeUI::AddChildNode( CTreeNodeUI* _pTreeNodeUI ) { if (!_pTreeNodeUI) return false; if (_tcsicmp(_pTreeNodeUI->GetClass(), _T("TreeNodeUI")) != 0) return false; _pTreeNodeUI = CalLocation(_pTreeNodeUI); bool nRet = true; if(pTreeView){ CTreeNodeUI* pNode = static_cast<CTreeNodeUI*>(mTreeNodes.GetAt(mTreeNodes.GetSize()-1)); if(!pNode || !pNode->GetLastNode()) nRet = pTreeView->AddAt(_pTreeNodeUI,GetTreeIndex()+1) >= 0; else nRet = pTreeView->AddAt(_pTreeNodeUI,pNode->GetLastNode()->GetTreeIndex()+1) >= 0; } if(nRet) { _pTreeNodeUI->SetVisible(GetFolderButton()->IsSelected()); //add by redrain 2014.11.7 mTreeNodes.Add(_pTreeNodeUI); } return nRet; }
總結:get
bug的修復代碼已經提交到我本身的Duilib庫。博客
個人Duilib庫代碼下載地址:點擊打開連接
Redrain 2014.12.30