- 由於我本身的數據結構是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;
}