轻松实现 CTreeCtrl 的全选与反选

 XEIM 企业即时通讯软件里面,有一个模块用于管理用户的联系人,其中,涉及到联系人的全选与反选,标准控件 CTreeCtrl 里没有这个功能,这里介绍一个简单的算法实现此功能,此功能用于最新版的飞鸽传书即时通讯软件。

代码如下:
void InverseAll();
BOOL CheckForChange();
void UncheckAll();
// 1. 反选
void _DLG_New_Schedule::InverseAll()
{
BOOL bCheck;
map<string, HTREEITEM>::iterator iGroup;
map<string, HTREEITEM>::iterator _END;
_END = m_mapGroup.end();
for (iGroup = m_mapGroup.begin();
iGroup != _END; iGroup ++)
{
   bCheck = TRUE;
   HTREEITEM hChild = m_tcMembers.GetChildItem(iGroup->second);
   string str = m_tcMembers.GetItemText(hChild);
   // 如果打勾了
   if (m_tcMembers.GetCheck(hChild))
   {
    bCheck = FALSE;
    m_tcMembers.SetCheck(hChild, FALSE);
   }
   else
   {
    m_tcMembers.SetCheck(hChild);
   }
   while(hChild = m_tcMembers.GetNextSiblingItem(hChild))
   {
    str = m_tcMembers.GetItemText(hChild);
    // 如果打勾了
    if (m_tcMembers.GetCheck(hChild))
    {
     bCheck = FALSE;
     m_tcMembers.SetCheck(hChild, FALSE);
    }
    else
    {
     m_tcMembers.SetCheck(hChild);
    }
   }
   if (bCheck == FALSE)
   {
   // AfxMessageBox(m_treeUserList.GetItemText(iGroup->second));
   }
   m_tcMembers.SetCheck(iGroup->second, bCheck);
}
}
// 1. 全选所有选项
void _DLG_New_Schedule::OnCheckAll()
{
if (((CButton*)GetDlgItem(IDC_CHECK_ALL))->GetCheck())
{
   UncheckAll();
   InverseAll();
}
else
{
   UncheckAll();
}
}
void _DLG_New_Schedule::OnCheckInverse()
{
if (((CButton*)GetDlgItem(IDC_CHECK_INVERSE))->GetCheck())
{
   InverseAll();
}
else
{
   InverseAll();
}
}

void _DLG_New_Schedule::UncheckAll()
{
map<string, HTREEITEM>::iterator iGroup;
for (iGroup = m_mapGroup.begin();
iGroup != m_mapGroup.end(); iGroup ++)
{
   if (m_tcMembers.GetCheck(iGroup->second))
   {
    m_tcMembers.SetCheck(iGroup->second, FALSE);
   }
   HTREEITEM hChild = m_tcMembers.GetChildItem(iGroup->second);
   string str = m_tcMembers.GetItemText(hChild);
   // 如果打勾了
   if (m_tcMembers.GetCheck(hChild))
   {
    m_tcMembers.SetCheck(hChild, FALSE);
   }
   while(hChild = m_tcMembers.GetNextSiblingItem(hChild))
   {
    str = m_tcMembers.GetItemText(hChild);
    // 如果打勾了
    if (m_tcMembers.GetCheck(hChild))
    {
     m_tcMembers.SetCheck(hChild, FALSE);
    }
   }
}
}
这些是我匆忙之中,匆匆写下来的代码,或许有许多不洽淡,希望各位有多多指教才是我的目的。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值