- 由于我本身的数据结构是list中套list,所以就将我状态保存到我自己对应的成员中。
- 思路:实现保存状态的函数------添加单击事件----在单击事件一开始就调用保存状态的函数,以便于刷新重绘时根据状态自动选中。
- 实现保存状态的函数
void SetAndAddSigDlg::OnBnClickedChangeSelect()
{
BOOL state;
CString sigstr;
string m_groupstr;
string m_sigstr;
list<Group>::iterator it;
m_groupstr = m_strTmp1.GetBuffer(0);
for (it = m_g_A2llist.begin(); it != m_g_A2llist.end(); it++)
{
if ("> " + it->group_Name == m_groupstr)
{
for (int i = 0; i < m_Sig_list.GetItemCount(); i++)
{
state = m_Sig_list.GetCheck(i);
sigstr = m_Sig_list.GetItemText(i, 1);
m_sigstr = sigstr;
map<string, Signal>::iterator itor;
for (itor = it->sigmap.begin(); itor != it->sigmap.end(); itor++)
if (itor->second.sig_Name == m_sigstr)
{
itor->second.data.active_enable = state;
}
}
}
}
}
- 添加单击事件
ON_NOTIFY(NM_CLICK, IDC_GROUP_TREE, &SetAndAddSigDlg::OnNMClickTree1)
- 调用函数
void SetAndAddSigDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
OnBnClickedChangeSelect();
CPoint point;
UINT uFlag;
BOOL bCheck;
GetCursorPos(&point);
m_Group_TreeCtrl.ScreenToClient(&point);
HTREEITEM hTree = m_Group_TreeCtrl.HitTest(point, &uFlag);
if (hTree && (TVHT_ONITEMSTATEICON & uFlag))
{
m_Group_TreeCtrl.SelectItem(hTree);
bCheck = m_Group_TreeCtrl.GetCheck(hTree);
}
*pResult = 0;
}