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);
    }
   }
}
}这些是我匆忙之中,匆匆写下来的代码,或许有许多不洽淡,希望各位有多多指教才是我的目的。