轻松实现 CTreeCtrl 的全选与反选

小发猫 2009-04-05 09:18:36
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);
}
}
}
}这些是我匆忙之中,匆匆写下来的代码,或许有许多不洽淡,希望各位有多多指教才是我的目的。
...全文
209 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
danxuezx 2009-04-05
  • 打赏
  • 举报
回复 1
好像代码很多,我做过这个工作,代码没有这么多
freeeim 2009-04-05
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 danxuezx 的回复:]
好像代码很多,我做过这个工作,代码没有这么多
[/Quote]
大哥,贴出来啊,共享。

15,979

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧