实现很简单,直接上代码:
1 void CCheckBoxTreeDlg::OnNMClickTree1(NMHDR *pNMHDR, LRESULT *pResult)
2 {
3 // TODO: 在此添加控件通知处理程序代码
4 CPoint point;
5 UINT uFlag;
6 HTREEITEM hTree;
7 BOOL bCheck;
8 GetCursorPos(&point);
9 m_treeTest.ScreenToClient(&point);
10 hTree = m_treeTest.HitTest(point, &uFlag);
11
12 if(hTree && (TVHT_ONITEMSTATEICON & uFlag))
13 {
14 bCheck = m_treeTest.GetCheck(hTree);
15 SetChildCheck(hTree, !bCheck);
16 }
17
18 *pResult = 0;
19 }
20 // 设置子节点是否被选中
21 void CCheckBoxTreeDlg::SetChildCheck(HTREEITEM hRoot, BOOL bCheck)
22 {
23 hRoot = m_treeTest.GetChildItem(hRoot); //获取子项句柄
24 while (NULL != hRoot)
25 {
26 m_treeTest.SetCheck(hRoot, bCheck);
27 SetChildCheck(hRoot,bCheck); //递归调用
28 hRoot = m_treeTest.GetNextSiblingItem(hRoot); //获取兄弟的句柄
29 }
30 }
实现思路很简单,就是在CTreeCtrl控件的点击事件处理函数中判断点击是否是checkbox控件,如果是则级联修改点击项和子节点的checkbox选中状态。
其中最关键的是第10行和12行,用来判断点击的是不是checkbox。
时间: 2024-11-03 22:15:35