如何使指定的节点被选中

CTreeCtrl 使某个节点被选中 一、创建树形控件        m_Operatelist.Create(WS_VISIBLE | WS_TABSTOP | WS_CHILD | WS_BORDER | TVS_HASBUTTONS | TVS_LINESATROOT | TVS_HASLINES | TVS_DISABLEDRAGDROP|TVS_TRACKSELECT|TVS_SHOWSELALWAYS, CRect 阅读详情

问题描述:在我的程序中有一个CTreeView视图,现在知道该视图中某个树节点的TVITEM结构体中的pszText和lParam两个参数,我要通过代码把该节点选中以触发TVN_SELCHANGING消息的发送。

解决办法一:

CWellTreeView* treeview=(CWellTreeView*)GetView(RUNTIME_CLASS(CWellTreeView));

treeview->OnInitialUpdate();

treeview->treeCtrl.SetFocus();

treeview->treeCtrl.Expand(treeview->treeCtrl.GetRootItem(),TVE_EXPAND);

TVITEM tvi;

 tvi.mask=TVIF_HANDLE|TVIF_PARAM;

tvi.lParam=m_iWellNumber;//m_iWellNumber对应要被选中节点的lParam参数

treeview->treeCtrl.GetItem(&tvi);

treeview->treeCtrl.SelectItem(tvi.hItem);

经过实验,该方法无效,节点根本就没有被选中!调试运行发现tvi.hItem的值始终为0xcccccccc,所以节点句柄根本就没有传进来。

 

解决办法二:

CWellTreeView* treeview=(CWellTreeView*)GetView(RUNTIME_CLASS(CWellTreeView));

treeview->OnInitialUpdate();

treeview->treeCtrl.SetFocus();

treeview->treeCtrl.Expand(treeview->treeCtrl.GetRootItem(),TVE_EXPAND);

char buff[80];

wsprintf(buff,"%s",m_strWellName);//m_strWellName对应要被选中节点的pszText参数

TVITEM tvi;

tvi.mask=TVIF_HANDLE|TVIF_TEXT;

tvi.pszText=buff;

tvi.cchTextMax=80;

treeview->treeCtrl.GetItem(&tvi);

treeview->treeCtrl.SelectItem(tvi.hItem);

第二种方法得到了第一种方法同样的结果,连节点句柄都没有传进去。

 

以上我自己想的两种方法不能解决,我只好上论坛求救,可是两天来我两度发帖,始终没有得到满意的解答,无奈只好自己再次推敲代码,问题肯定出在节点句柄上,于是我想了另外一种方法,在一个节点被选中的同时,把该节点句柄存储在CTreeView的一个成员变量m_pCurrItem中,

解决办法三:

CWellTreeView* treeview=(CWellTreeView*)GetView(RUNTIME_CLASS(CWellTreeView));

treeview->OnInitialUpdate();

treeview->treeCtrl.SetFocus();

treeview->treeCtrl.Expand(treeview->treeCtrl.GetRootItem(),TVE_EXPAND);

treeview->treeCtrl.SelectItem(treeview->m_hCurrItem);

但是我再次遭到了打击,节点还是没有被选中,m_hCurrItem倒是有了值,但这是我意料之中的事情。

但是选中最后一个节点的操作却可以实现:

CWellTreeView* treeview=(CWellTreeView*)GetView(RUNTIME_CLASS(CWellTreeView));

treeview->OnInitialUpdate();

treeview->treeCtrl.SetFocus();

treeview->treeCtrl.Expand(treeview->treeCtrl.GetRootItem(),TVE_EXPAND);

HTREEITEM hitem=treeview->treeCtrl.GetNextItem(NULL,TVGN_LASTVISIBLE);

treeview->treeCtrl.SelectItem(hitem);

这样也可以实现:

CWellTreeView* treeview=(CWellTreeView*)GetView(RUNTIME_CLASS(CWellTreeView));

treeCtrl.SelectItem(treeCtrl.GetRootItem());

treeCtrl.SelectItem(hitem);

也就是出现了这样的症状:如果调用OnInitialUpdate了以后,可以选中最后一个结点但不可以选中其他节点;如果不OnInitialUpdate,就可以选中任意节点。矛盾出现了:如果改变了某个节点的属性(如pszText),必须OnInitialUpdate更新,但是此节点又不是最后一个,此节点也不能选中。为什么OnInitialUpdate以后就只能选中最后一个几点呢?我们还是应该在句柄上找问题,有一点我们不能质疑:GetNextItem(NULL,TVGN_LASTVISIBLE)一定可以准确的获取最后一个节点的句柄。我们却不能肯定m_hCurrItem中存储的一定是当前要选中的节点,貌似是OnInitialUpdate捣的鬼,没错!OnInitialUpdate以后,虽然树节点有可能没有变化,但是节点句柄却会发生变化,也就是说m_hCurrItem不一定代表当前节点。

经过上面分析,我们可以想出如下对策:不采用句柄变量来存储当前节点句柄,而是采用动态句柄数组来存贮,在OnInitialUpdate中把更新后的节点句柄存贮在句柄数组中,句柄数组中存贮的一定是最新的节点句柄。另外,为了是程序更“面向对象”,我把选中当前节点操作放在CWellTreeView类中实现:

void CWellTreeView::SelectCurrItem(long i) {  

OnInitialUpdate();

 treeCtrl.SetFocus();  

treeCtrl.Expand(treeCtrl.GetRootItem(),TVE_EXPAND);  

treeCtrl.SelectItem(m_hCurrItem[i]);

}

这便是终极解法,前面几种解法基本没有利用价值。不仅节点被选中,TVN_SELCHANGING消息也被发送成功!

 

 

我还要说明两点点东西: 1.TVN_SELCHANGING消息只是在节点选择改变时才被发送,两次选择同一个几点,第二次选择时不会发送TVN_SELCHANGING消息。 2.使用GetItem必须要给出Item的句柄。以下信息摘自MSDN中TVM_GETITEM消息的说明: When the message is sent, the hItem member of the TVITEM or TVITEMEX structure identifies the item to retrieve information about, and the mask member specifies the attributes to retrieve.

初学者在学习过程中必然会遇到很多问题,我指的不仅仅是程序员,无论做什么。所以我没有抱怨自己。我总是在一切水落石出时才发现,原来问题就出在我一个小小的疏忽上面。是的,只有逻辑思维严密的人才有资格成为优秀的程序员!

zTree选中指定ID的节点 zTree选中指定ID的节点 发布时间: 2018-01-15 22:31:44 1.已存在初始化的zTree: <ul id="treeDemo" class="ztree"></ul> 2.JS选中zTree指定ID的节点 varzTreeMenu = $.fn.zTree.getZTreeObj("treeDemo");//根据treeID(zTree的DOM容器的... 阅读详情

相关推荐

一步步教你获取ADNI影像数据:从搜索到下载全流程解析

本文详细解析了从ADNI数据库获取阿尔茨海默病影像数据的全流程,包括账号注册、数据检索技巧、高效下载策略及常见问题解决方案。特别介绍了高级搜索的黄金组合和智能数据集管理方法,帮助研究者快速获取T1加权MRI、PET等多模态影像数据,提升科研效率。

weixin_29061465的博客 323

MFC CTreeView 获得点击选中的项

ERROR:             HTREEITEM hItem = m_tree.GetSelectedItem();   //获得的项并不是我点击的项 RESOLVE:            CPoint pt = GetCurrentMessage()->pt;            m_tree.ScreenToClient(&pt);            UINT uFl

weixin_36587312的博客 1849

GAMES101学习-第8课进行shader的初步了解

详细理解课上展示的像素着色器GLSL,以及了解了API、OpenGL、DirectX到底是什么,还有shadertoy这个网站的初步探索。

qq_41835314的博客 1917

MFC控件之TreeCtrl

当无法可视化设置控件属性的时候,需要手动对控件属性进行设置。此时需要对控件属性十分了解。在此看一下TreeCtrl控件的属性设置。 一、TreeCtrl 不管是作用TreeCtrl控件还是ListCtrl控件,都得用到几个结构体,如果对这些结构体不了解,那在使用控件时就糊理糊涂的,胡乱修改结构体的值,设置不出想要的结果,也不知改哪里,结果出来了也不知怎么出来的。所以必须对我们所要认知的东西

airbigboy的专栏 1404

脱壳--02.exe

程序开始 使用OD打开程序 发现无法利用esp定律 程序直接运行 查找模块间调用 随便找到一个函数的调用 发现是FF15方式调用 所以是vs的程序 vs程序大致分成两种 vs20xx (特征函数:GetSystemTimeAsFileTime)和 vc++6.0(特征函数:GetVersion) 通过链接器版本 发现是vc6.0 直接在GetVersion上下断点 重新运行程序 断点断下 返回到调用处 vc6.0和易语言的第一个CALL都是GetVers...

weixin_45012273的博客 1112

S7-1500与WinCC GroupDisplay组显示的高效配置指南

本文详细介绍了S7-1500 PLC与WinCC GroupDisplay组显示功能的高效配置方法,涵盖报警状态配置、WinCC端组显示控件设置及常见问题排查。通过实战案例和优化建议,帮助工程师快速掌握工业自动化项目中报警信息可视化的关键技术,提升生产线监控效率。

weixin_29292535的博客 440

MFC CTreeView学习之右键菜单_获取选中节点的方式HitTest和GetSelectedItem的区别(二)

CPoint pt; UINT nFlags; GetCursorPos(&pt); ::ScreenToClient(m_TreeCtrl->m_hWnd, &pt); HTREEITEM hItem2 = m_TreeCtrl->HitTest(pt, &nFlags); //获取选中节点  注:此处获取的是当前选中的节点 CString sMsg; sMsg.Format(_

Zohar的博客 3139

DFI协议时序

参数名称典型值应用场景关键影响tcmd_lat1-2个时钟周期命令与地址锁存同步地址错误风险tphy_wrlat1-2个时钟周期写操作响应速度写带宽与延迟2-3个时钟周期写操作端到端延迟系统吞吐量1-2个时钟周期连续写命令间隔信号干扰与资源冲突tphy_rdlat1-2个时钟周期读操作响应速度读带宽与延迟trddata_en由CL决定(如0.41 ns)读数据返回时间系统延迟10-20 ps写数据与命令对齐数据丢失风险<1 µs低功耗模式切换。

qq_43134430的博客 5103

Tree树节点选中及取消和指定节点的隐藏

指定节点变色 指定节点隐藏 单击节点 未选中则选中该节点 已选中则取消该节点 前台: 1.HTML <ul id="listDept" name="listDept" data-options="region:'center',border: true"></ul> 2.JS var deptTree = null; $(...

diecongfei3187的博客 2446

RK3588部署YOLOv11与RKNN全流程教程

本文详细介绍了在RK3588开发板上部署YOLOv11目标检测模型的全流程。主要内容包括:PC端CUDA/cuDNN环境配置、Anaconda虚拟环境搭建、RKNN Toolkit2安装;YOLOv11模型从PyTorch到ONNX再到RKNN的格式转换;以及RK3588开发板的系统配置、RKNPU驱动安装和最终推理实现。教程提供了完整的代码示例,帮助开发者快速在边缘设备上实现高效的AI推理应用,涵盖从环境准备到实时检测的全套解决方案。

FJN110的博客 375

QT应用编程: Win10系统下QT5.12搭建Android开发环境(配件齐全)

在win10系统下,搭建QT5.12.6 的Android开发环境。

7688

jstree获取当前选中节点和选中指定节点(select)

1. 获取jstree当前选中节点 function getSelectNodeId() {     var treeNode = $('#treeSource').jstree(true).get_selected(true)[0]; //获取所有选中的节点对象     var nodeId = treeNode.original.id;     return nodeId; } 2. 选...

lebron3v的专栏 2万+

国家自然基金回避专家有必要填写吗?被回避专家能看到吗?

不填也能中填1–2个最保险只填1个最直接竞争者。✅一句话结论可以不填,但建议填1–2个被回避专家绝对看不到如果你愿意,我可以再告诉你一个很多人不知道的国家自然基金“评审分组规则”——它其实决定了你的项目最可能送到哪些专家手里,这对地区基金中标率影响很大。

qq_15963745的博客 155

Ztree 指定ID节点的选中 和 指定ID节点的展开

直接代码 然后在给大家解释 var treeObj = $("#treeDemo"); $.fn.zTree.init(treeObj, setting, Znode1); zTree_Menu = $.fn.zTree.getZTreeObj("treeDemo"); var node = zTree_Menu.getNodeByParam("id",pid );

足迹 3万+

Camera2Demo

在Camera2 的基础上进行封装,使得Camera2一堆初始化逻辑与Activity分离,降低耦合度,完成预览拍照并保存的操作

Data-Structures-and-Algorithm-Analysis-in-Java.pdf

作者: Weiss, Mark A. 出版社: Addison Wesley Data Structures and Algorithm Analysis in Java is an “advanced algorithms” book that fits between traditional CS2 and Algorithms Analysis courses. In the old ACM Curriculum Guidelines, this course was known as CS7. This text is for readers who want to learn good programming and algorithm analysis skills simultaneously so that they can develop such programs with the maximum amo...

ztree 选中,展开指定节点

ztree 选中,展开指定节点

月光散 9319

VB摄像头监控

该VB模块可对摄像头捕获的画面进行录像等,可在创建的窗口进行控制

关于ztree打开关闭所有节点,选中指定id节点

var isOneByOneExpand=false;//是否递归展开 //展开节点 function expendNode(nodeId){ var node = treeObj.getNodeByParam("id",nodeId); treeObj.expandNode(node, true, true, true,true); } //展开所有节点 funct

menghuannvxia的专栏 5731

jre9下载 jdk9

(Java SE Runtime Environment 9.0) 9.0u175 官方最新版 【x86|x64】

关闭ant的tree_Tree树节点选中及取消和指定节点的隐藏

指定节点变色指定节点隐藏单击节点未选中则选中该节点已选中则取消该节点前台:1.HTML2.JSvar deptTree = null;$(function() {deptTree = $('#listDept');initTree() ;}//初始化树function initTree() {deptTree.tree({url: '../dutyController/listDeptMember...

weixin_39918145的博客 4455

Ext TreePanel中选中指定的节点

Ext TreePanel中选中指定的节点

kdmhh的专栏 1万+

el-tree 动态指定默认选中节点

核心代码 highlight-current 高亮选中节点 node-key="label" 指定以哪个属性为唯一识别的 key :current-node-key="current" 自定义current变量,存储默认选中节点对应的key值 v-if="current" 因是动态绑定,最开始current为空,所以需在current有值后,才渲染 el-tree 完整演示代码 <template> <el-tree.

朝阳39的博客 9651

jquery treeview 展开指定节点,选中指定节点

项目中遇到这个问题,网上找了一大片都没有找到,最后自己解决,总结下,其实是通过改变节点的样式来达到目的的。 //展开节点 var container = $("#browser").find("li[title='" + folderName + "']"); container.attr("class", "closed collapsab...

ailiu6134的博客 1040

ztree根据Id查找指定节点,并选中节点,把下级节点展开

$(document).ready(function(){ var lastKey; var productTypeId = $("#productTypeId").val();//获取隐藏域Id值 if(productTypeId!=''){ va...

1008

jstree指定选中节点_jstree 获取选中节点的所有子子点

//加载功能树functioninitTree() {$.jstree.destroy();$.ajax({type:"Get",url:"/Department/GetTreeData/0?_t=" + new Date().getTime(), //获取数据的ajax请求地址success: function(data) {$('#dptTree').jstree({ //创...

weixin_36023930的博客 942

前端gojs中禁用指定节点的选中效果

gojs节点选中问题,适用于禁用某些节点的选中状态,选中节点时判断该节点要不要禁用

来一颗砂糖橘 1845

jstree指定选中节点,防止jsTree节点选择

I'm using the jsTree plugin to list folders in the file system. I need to prevent a user from changing to another node before a certain condition is met.The below code does not stop the propagation......

weixin_29655587的博客 195
上一篇: 表型记录集不能执行SQL语句
下一篇: MAKEWPARAM
yingzai621
博客等级 码龄19年 12粉丝 20原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值