duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
2014-12-30 13:45
489 查看
转载请说明出处,谢谢~~:/article/1371197.html
这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够好,后来重新修改了代码,并记录到博客。
问题描述:
在仿酷狗程序中,动态添加音乐项目到播放列表里,这是必须的功能,动态添加的功能已经做好。但是我发现,当一个分组本来在收缩状态下,这是给它动态添加音乐项目就会发生很搞笑的问题:分组是收缩状态,而动态添加的项目却显示了出来,如图:
可以看到,一共有20个音乐项目,原本的10个已经在收缩状态下所以没有显示,而新添加的项目却直接显示了出来。这里应该有两种处理逻辑:
1)动态添加子项目时,发现分组处于收缩状态后,新添加的项目自动隐藏而不显示出来
2)动态添加子项目时,发现分组处于展开状态后,新添加的项目自动展开
修复这个bug只要,在CTreeNodeUI添加元素时进行判断,控制新加元素的显示隐藏属性就可以了。修改CTreeNodeUI的AddAt和AddChildNode函数。修改后的函数如下:
总结:
bug的修复代码已经提交到我自己的Duilib库。
我的Duilib库代码下载地址:点击打开链接
Redrain 2014.12.30
这个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
相关文章推荐
- duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
- asp.net动态添加CheckBox控件及判断是否选中,以下是页面及后台代码
- duilib List控件,横向滚动时列表项不移动或者显示错位的bug的修复
- duilib修复ActiveXUI控件bug,以支持flash透明动态背景
- duilib修复ActiveXUI控件bug,以支持flash透明动态背景
- duilib修复ActiveXUI控件bug,以支持flash透明动态背景
- duilib 修复CTreeViewUI复选功能判断不准确的bug
- duilib 修复 容器控件 rightbordersize和bottombordersize属性显示错误的bug
- 【duilib界面库】duilib界面库(干货) 修复UIScrollBar鼠标移出控件外显示异常的BUG
- duilib List控件,横向滚动时列表项不移动或者显示错位的bug的修复
- duilib 修复CTreeViewUI复选功能判断不准确的bug
- duilib combo控件,当鼠标滚动时下拉列表自动关闭的bug的修复
- 15 动态添加显示控件 即 动态刷新显示
- duilib relativepos属性导致控件错误的bug修复
- 修复duilib库UISlider控件的4个bug
- 仿酷狗音乐播放器开发日志二十三 修复Option控件显示状态不全的bug(附源码)
- extjs 动态控制 控件是否显示
- 在窗体上放置一个标签、一个treeviw控件。窗体打开时,动态为treeviw控件添加节点,选择某个节点后,标签上显示所选内容。
- extjs 动态控制 控件是否显示
- duilib中CTextUI控件设置文字时不刷新显示的bug