zoukankan      html  css  js  c++  java
  • duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug

    转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947


            这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够好,后来重新修改了代码,并记录到博客。


    问题描述:


            在仿酷狗程序中,动态添加音乐项目到播放列表里,这是必须的功能,动态添加的功能已经做好。但是我发现,当一个分组本来在收缩状态下,这是给它动态添加音乐项目就会发生很搞笑的问题:分组是收缩状态,而动态添加的项目却显示了出来,如图:


              


           可以看到,一共有20个音乐项目,原本的10个已经在收缩状态下所以没有显示,而新添加的项目却直接显示了出来。这里应该有两种处理逻辑:


             1)动态添加子项目时,发现分组处于收缩状态后,新添加的项目自动隐藏而不显示出来

             2)动态添加子项目时,发现分组处于展开状态后,新添加的项目自动展开


           修复这个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;
    	}


    总结:



          bug的修复代码已经提交到我自己的Duilib库。

          我的Duilib库代码下载地址:点击打开链接



      Redrain  2014.12.30

  • 相关阅读:
    20145310《信息安全系统设计基础》第二周学习总结
    20145310《信息安全系统设计基础》第一周学习总结
    20145310 第0周《信息安全系统设计基础》学习总结
    课程总结
    20145310《Java程序设计》第5次实验报告
    20145310 《Java程序设计》第10周学习总结
    20145310 《Java程序设计》第9周学习总结
    20145310《Java程序设计》第4次实验报告
    20145310《Java程序设计》第3次实验报告
    git的安装以及遇到的问题
  • 原文地址:https://www.cnblogs.com/redrainblog/p/4209716.html
Copyright © 2011-2022 走看看