MFC TreeCtrl和listctrl搭配下,左键单击切换tree中不同的group时,保存list的check状态

  • 由于我本身的数据结构是list中套list,所以就将我状态保存到我自己对应的成员中。
  • 思路:实现保存状态的函数------添加单击事件----在单击事件一开始就调用保存状态的函数,以便于刷新重绘时根据状态自动选中。
  1. 实现保存状态的函数
void SetAndAddSigDlg::OnBnClickedChangeSelect()

{

	BOOL state;
	CString sigstr;
	string m_groupstr;
	string m_sigstr;
	list::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::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;
				}

			}
		}
	}
	
}
  1. 添加单击事件
ON_NOTIFY(NM_CLICK, IDC_GROUP_TREE, &SetAndAddSigDlg::OnNMClickTree1)
  1. 调用函数
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;
}

你可能感兴趣的:(MFC开发)