CTreeCtrl 父结点联动子结点CheckBox

实现很简单,直接上代码:


 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

CTreeCtrl 父结点联动子结点CheckBox的相关文章

妙味:结点选取、结点操作

(兼容)通用子结点选取.第一个子结点.最后一个子结点 (兼容)兄弟结点 父节点 (函数)通过样式选取 结点:添加.删除 结点属性:获取与设置 结点内容:获取与设置 // 结点选取 ================================================================================ // 子结点-------------------------------------------------------------------------

不要在遍历子结点时修改parent

[不要在遍历子结点时修改parent] 在用for/foreach遍历子结点时,如果在这过程中有改变子结点的parent,会导致不可预料的结果.我所遇到的问题是,在此种情况下,并非所有的子结点都能遍历到.如果硬要循环中修改child.transform.parent,则使用索引,从childCount-1一直递减遍历到0.如下: 不要在遍历子结点时修改parent

JavaScript--DOM访问子结点childNodes

访问子结点childNodes 访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性. 语法: elementNode.childNodes 注意: 如果选定的节点没有子节点,则该属性返回不包含节点的 NodeList. 我们来看看下面的代码: 运行结果: IE: UL子节点个数:3 节点类型:1 其它浏览器: UL子节点个数:7 节点类型:3 注意: 1. IE全系列.firefox.chrome.opera.safari兼容问题 2. 节点之间的空白符,在

js--checked的全选,反选 ,点击子的checkbox改变父的checkbox状态

下面是我通过学习js基础利用js简单的实现了一个小的案例包含具体的思路和代码,这里的表格没有写css样式美化. 点击父的checkbox时呈现的状态 当子的checkbox没有全部选中时,父的checkbox也改变了相应的状态 点击反选之后呈现的状态 具体代码如下: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <meta name=

基于中序遍历找到一个结点的后继结点

题目: 基于中序遍历找到一个结点的后继结点. 分析: 首先明白中序遍历,顺序为:左--->根----->右 如果当前结点为p. 有两种情况: 1.当p有右子树时,那么其右子树的最左结点即为所求: 2.当p没有右子树时.有以下两种情况: watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvY2hkamo=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center"

Devexpress TreeList选择父级联动

Treelist当显示复选框后,父级和子级的复选框没有关联,使用过程中很不便,如图所示 自己给treelist添加父子级联动 /// <summary> /// 初始化TreeList,父子节点选择关联 /// </summary> public class TreeListInitial { TreeList Tree; /// <summary> /// 初始化TreeList,父子节点选择关联 /// </summary> /// <param

完全二叉树两个结点的公共结点

题目描述 1 / 2 3 / \ / 4 5 6 7 /\ /\ /\ /\ 如上图所示,由正整数 1, 2, 3, ...组成了一棵无限大的二叉树.从某一个结点到根结点(编号是1的结点)都有一条唯一的路径,比如从5到根结点的路径是(5, 2, 1),从4到根结点的路径是(4, 2, 1),从根结点1到根结点的路径上只包含一个结点1,因此路径就是(1).对于两个结点x和y,假设他们到根结点的路径分别是(x1, x2, ... ,1)和(y1, y2,...,1),那么必然存在两个正整数i和j,使

父表、子表 主外键关系

ORACLE官方文档介绍: Concurrency Control, Indexes, and Foreign Keys You almost always index foreign keys. The only exception is when the matching unique or primary key is never updated or deleted.(你总是需要对 外键添加索引! 唯一的例外就是:匹配的主键列 或是 唯一列 从不进行更新操作或者 删除操作) Oracle

js window.open() 父窗口与子窗口的互相调用

javascript 父窗口与子窗口的互相调用 <html> <head></head> <body> 主要实现父子关系的页面 window.opener 是window.open 打开的子页面调用父页面对象 a.html <title>主页面</title> <script type="text/javascript"> /** 为测试IFrame子窗口调用父窗口的全局变量而添加的测试变量 */ va