1. 程式人生 > >MFC樹控制元件父Item與子Item的checkbox的聯動

MFC樹控制元件父Item與子Item的checkbox的聯動

首先為樹控制元件新增NM_CLICK訊息,然後在訊息響應函式加上下面程式碼即可

void CDlgFitleFile::OnClickTreeFiletype(NMHDR* pNMHDR, LRESULT* pResult) 
{
	// TODO: Add your control notification handler code here
	CPoint     pt;
	UINT       uFlag;    
    BOOL       bCheck;
	HTREEITEM  hSelectedItem;
	HTREEITEM  hChildrenItem;
	HTREEITEM  hNextItem;

	uFlag = 0;
	pt = ::GetMessagePos();
	m_treeFileType.ScreenToClient(&pt);
    hSelectedItem = m_treeFileType.HitTest(pt, &uFlag);

	if (uFlag & TVHT_ONITEMSTATEICON)
	{
       m_treeFileType.SelectItem(hSelectedItem);
	   bCheck = m_treeFileType.GetCheck(hSelectedItem);	   
	   
	   if (m_treeFileType.ItemHasChildren(hSelectedItem))
	   {
		   hChildrenItem = m_treeFileType.GetChildItem(hSelectedItem);
		   while (hChildrenItem != NULL)
		   {
			   if (!bCheck)
			       m_treeFileType.SetCheck(hChildrenItem, TRUE);
			   else
				   m_treeFileType.SetCheck(hChildrenItem, FALSE);

			   hNextItem = m_treeFileType.GetNextItem(hChildrenItem, TVGN_NEXT);
			   hChildrenItem = hNextItem;
		   }
	   }	  
	}

	*pResult = 0;
}