duilib 修复CTreeViewUI复选功能判断不准确的bug

简介: 转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42265209         CTreeViewUI里面自带了复选的功能,但是复选功能存在bug:       ...

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


        CTreeViewUI里面自带了复选的功能,但是复选功能存在bug:

        1)当一个分组下面存在子项时,子项被手动全选后,分组的复选框没有自动变为选中状态


         


        2)当一个分组下面存在子项时,当所有子项都取消选中状态时,分组的复选框还是选中状态


      



        分组的CTreeNodeUI控件应该自动判断是否为选中状态,bug被修复后的效果如下:


      


修复过程:


       当某个复选框被单击后会触发CTreeViewUI控件的OnCheckBoxChanged函数,这时应该在这里做出判断,来决定分组的选中状态,为此我给CTreeNodeUI控件增加了IsAllChildChecked函数。


      修改后的OnCheckBoxChanged函数如下:


	bool CTreeViewUI::OnCheckBoxChanged( void* param )
	{
		TNotifyUI* pMsg = (TNotifyUI*)param;
		if(pMsg->sType == _T("selectchanged"))
		{
			CCheckBoxUI* pCheckBox = (CCheckBoxUI*)pMsg->pSender;
			CTreeNodeUI* pItem = (CTreeNodeUI*)pCheckBox->GetParent()->GetParent();
			SetItemCheckBox(pCheckBox->GetCheck(),pItem);

			if(pItem->GetParentNode() != NULL)  //edit by:Redrain  2014.12.11
				pItem->GetParentNode()->IsAllChildChecked();
		
			return true;
		}
		return true;
	}


        当某个复选框被单击后,去通知他的父控件,让父控件判断是否应该是选中状态。为CTreeNodeUI控件增加的IsAllChildChecked函数如下:


	void CTreeNodeUI::IsAllChildChecked()
	{	
		bool bIsAllChildChecked = true;
		bool bIsAllChildUncheck = true;
		int nCount = GetCountChild();
		if(nCount > 0)
		{			
			for(int nIndex = 0;nIndex < nCount;nIndex++)
			{
				CTreeNodeUI* pItem = GetChildNode(nIndex);
				if(!pItem->GetCheckBox()->IsSelected())
				{
					bIsAllChildChecked = false;
				}
				else
				{
					bIsAllChildUncheck = false;
				}
			}			
			if (bIsAllChildChecked && !GetCheckBox()->IsSelected())
			{
				GetCheckBox()->Selected(true);
				return;
			}
			else if (bIsAllChildUncheck && GetCheckBox()->IsSelected())
			{
				GetCheckBox()->Selected(false);
				return;
			}
			
		}

	}


总结:



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

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



  Redrain  2014.12.30

目录
相关文章
|
容器
duilib 修复 容器控件 rightbordersize和bottombordersize属性显示错误的bug
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/45560943         DuiLib的容器控件可以用bordersize统一指定边框宽度,也可以用rightbordersize、bottombordersize等属性单独指定某一个边框的宽度。
1242 0
|
容器 C++ 数据格式
duilib List控件,横向滚动时列表项不移动或者移动错位的bug的修复
转载请说明出处,谢谢~~       这篇博客已经作废,只是留作记录,新的bug修复博客地址:http://blog.csdn.net/zhuhongshu/article/details/42264673       之前就在群里挺群友朋友说道,使用List控件,里面加入ListContainElementUI元素,当List出现横向滚动条时,滚动条滑动后元素不跟着滑动或者滑动后位置不正确。
1197 0
|
C++ 容器
duilib relativepos属性导致控件错误的bug修复
转载请说明出处,谢谢~~         我在仿酷狗音乐播放器的开发日志系列里,曾经提到了这个bug,文章地址为:http://blog.csdn.net/zhuhongshu/article/details/38145365。
1109 0
|
容器
duilib List控件,横向滚动时列表项不移动或者显示错位的bug的修复
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264673         关于这个bug的修复我之前写过一篇博客,连接为:http://blog.csdn.net/zhuhongshu/article/details/40622705         本以为已经修复好,但是后来有网友私聊我,反映到还存在bug。
1405 0
duilib 修复CTreeViewUI控件动态添加子控件时,对是否显示判断不足的bug
转载请说明出处,谢谢~~:http://blog.csdn.net/zhuhongshu/article/details/42264947         这个bug我在仿酷狗开发日志里提到过,不过后来发现修复的不够好,后来重新修改了代码,并记录到博客。
1437 0
|
索引 消息中间件
duilib 修复combo控件打开下拉菜单后不会自动定位到上次选择的位置上的bug
转载请说明原出处,谢谢:http://blog.csdn.net/zhuhongshu/article/details/43484589                 今天群里一个网友向我反应combo控件的一个bug:单击combo控件,展开下拉菜单后,不会自动定位到上次选择的位置,而是定位到最开头的位置。
1372 0
|
监控
仿酷狗音乐播放器开发日志二十三 修复Option控件显示状态不全的bug(附源码)
转载请说明原出处,谢谢~~          整个仿酷狗工程的开发将近尾声,现在还差选项设置窗体的部分,显然在设置窗体里用的最多的就是OptionUI控件,我在写好大致的布局后去测试效果,发现Option控件的显示效果很不理想。
1142 0
|
Web App开发 监控 Java
Web测试中定位bug方法
在web测试过程中,经常会遇到页面中内容或数据显示错误,甚至不显示,第一反应就是BUG,进一步了解这个BUG的问题出在那里,是测试人员需要掌握的,可以简单的使用浏览器自带开发者工具、数据库工具配合去排查。
1902 0

热门文章

最新文章