MFC TreeCtrl和listctrl搭配下,左鍵單擊切換tree中不同的group時,保存list的check狀態

  • 由於我本身的數據結構是list中套list,所以就將我狀態保存到我自己對應的成員中。
  • 思路:實現保存狀態的函數------添加單擊事件----在單擊事件一開始就調用保存狀態的函數,以便於刷新重繪時根據狀態自動選中。
  1. 實現保存狀態的函數
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;
				}

			}
		}
	}
	
}
  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;
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章