duilib 修復CTreeViewUI控件動態添加子控件時,對是否顯示判斷不足的bug

轉載請說明出處,謝謝~~: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

相關文章
相關標籤/搜索