树形控件CTreeCtrl的使用

MFC 树形控件CTreeCtrl类 树形控件的创建 MFC为树形控件提供了CTreeCtrl类,它封装了树形控件的所有操作。 树形控件的创建也是有两种方式,一种是在对话框模板中直接拖入Tree Control控件创建,另一种就是通过CTreeCtrl类的Create成员函数创建。下面主要讲后者。 CTreeCtrl类的Create成员函数的原型如下: virtual BOOL Create( DWORD dwStyle, const RECT& rect, 阅读详情

树形控件在界面编程中应用十分普遍,如在资源管理器中和树形结构显示书的目录等,我们一步步研究树形控件的使用。

在对话框界面上首先拖动创建一个树,一般我们改变三个属性:

Has Buttons显示带有”+”或”-“的小方框,表示某项能否被展开或已展开,默认为选中,我们改为选中。

Has Lines在父项与子项之间连线以清楚地显示结构,默认为选中,改为选中。

Lines at root:在根部划线,默认为选中,改为选中。

其余根据需要,可以修改,如Always show slection,Edit labels

接下来就要按我们的需要显示内容了,请看常用函数:

改变节点函数:

插入树节点:HTREEITEM InsertItem(LPCTSTR lpszItem, int nImage,int nSelectedImage, HTREEITEM hParent = TVI_ROOT, HTREEITEM hInsertAfter = TVI_LAST)

lpszItem为项的名称,nImage为位图序列的索引,nSelectedImage为选中项的位图序列索引,hParent为插入项的父项,如果为TVI_ROOT或NULL,则插入树的最高层,hInsertAfter取值为TVI_FIRST,TVI_LAST,TVI_SORT。

删除树节点:BOOL DeleteItem(HTREEITEM hItem)

删除所有树节点:BOOL DeleteAllItems()

扩展节点:BOOL Expand(HTREEITEM hItem, UINT nCode),nCode是一个标志,指定了函数执行的操作,可以是TVE_COLLAPSE(折叠),TVE_COLLAPSERESET(折叠并移走所有的子项),TVE_EXPAND(展开),TVE_TOGGLE(在展开和折叠状态之间反转).

 

遍历树节点相关函数:

HTREEITEM GetRootItem() const;

HTREEITEM GetNextItem(HTREEITEM hItem, UINT nCode) const

HTREEITEM GetChildItem(HTREEITEM hItem) const

HTREEITEM GetNextSiblingItem(HTREEITEM hItem) const

HTREEITEM GetPrevSiblingItem(HTREEITEM hItem) const

HTREEITEM GetParentItem(HTREEITEM hItem) const

 

HTREEITEM GetFirstVisibleItem() const

HTREEITEM GetNextVisibleItem(HTREEITEM hItem) const

HTREEITEM GetPrevVisibleItem(HTREEITEM hItem) const

HTREEITEM GetLastVisibleItem() const

 

获取设置节点标题:

CString GetItemText(_In_ HTREEITEM hItem) const;

BOOL SetItemText(_In_ HTREEITEM hItem, _In_z_ LPCTSTR lpszItem);

 

获得或设置选择的节点:

HTREEITEM GetSelectedItem() const

BOOL SelectItem(HTREEITEM hItem)

是否有子节点:BOOL ItemHasChildren(_In_ HTREEITEM hItem) const;

检测点是否在树节点区域:HTREEITEM HitTest(_In_ CPoint pt, _In_opt_ UINT* pFlags = NULL) const;

判断是否是否最顶层节点用GetParentItem(hItem)== NULL

树节点右键单击菜单的实现,先重载右键单击函数,然后分别实现相应菜单的功能:

void C**Dlg::OnNMRClickTree1(NMHDR *pNMHDR, LRESULT *pResult)

{

    // TODO: 在此添加控件通知处理程序代码

    CPoint pt; 

    GetCursorPos(&pt); 

    m_Tree.ScreenToClient(&pt);

   

    HTREEITEM hCurItem = m_Tree.GetSelectedItem();

    //判断右键的位置处是否是树形控件的一个节点

    //若有,则弹出右键菜单

    HTREEITEM  hItem = m_Tree.HitTest(pt);

    if (hItem == NULL)

    {

       m_Tree.SelectItem(NULL);

    }

    else if (hCurItem != hItem)

    {

       m_Tree.SelectItem(hItem);

    }

    m_Tree.ClientToScreen(&pt);

    CMenu menu;

    if (menu.LoadMenuA(IDR_MENU1))

    {

       CMenu* pMenu = menu.GetSubMenu(1);

       if (pMenu != NULL)

       {

           pMenu->TrackPopupMenu(TPM_LEFTALIGN, pt.x, pt.y, this);

           pMenu->DestroyMenu();

           *pResult = 1;

           return;

       }  

    }

    *pResult = 0;

}

实现树节点的多选和拖动需要派生一个新类,在此不再详写了。

深入掌握CTreeCtrl:创建与操作树形控件 在Windows编程中,控件通过发送通知消息来通知父窗口有关特定事件的信息。TVN_SELCHANGED是CTreeCtrl控件发出的一个通知消息,它在用户改变了选择的节点时触发。了解这个消息是理解树控件节点选择机制的关键,这对于实现用户交互逻辑至关重要。TVN_SELCHANGED通知消息是一种预定义的消息,被发送到与CTreeCtrl控件相关联的父窗口。当用户在控件中选择一个新节点时,这个消息会被发送,父窗口负责处理这个消息并做出响应。 阅读详情

相关推荐

CSplitterWnd、CTreeView、CTreeCtrl的使用

本程序中附带了使用CSplitterWnd进行视图切分,CTreeView、CFormView的使用方法,并且使用递归的算法,将树的节点展开。以及左右视图间发送消息的方法!!

MFC list control右键显示菜单

【代码】MFC list control右键显示菜单。

m0_72895175的博客 896

CTreeCtrl(树状控件)用法源代码

CTreeCtrl(树状控件)用法CTreeCtrl(树状控件)用法CTreeCtrl(树状控件)用法

MFC 右键菜单

//控件内鼠标的右击事件(当前控件为listview) void CUserPage::OnNMRClickListUser(NMHDR *pNMHDR, LRESULT pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast(pNMHDR); // TODO: 在此添加控件通知处理程序代码 pResult = 0; NM_LISTVIEW pNMListView = (NM_LISTVIEW)pNMHDR; if(pNMListView

weixin_46287210的博客 448

STM32 (基于HAL库) 硬件IIC任意地址读写任意字节----AT24CXX芯片

转了一圈,发现有关STM32的iic的硬件是使用比较少,基于HAL库的就更少,传统的,大家都是采用软件模拟的。有iic的协议相对复杂,同时灵活,尤其是不同的设备的I2C通信组合变化也不同,使用灵活的软件模拟也是可以理解的,在加上I2C的设备读写速度都比较低,硬件读写的优势就更无法体现,哪怕硬件I2C可以开启DMA,甚至在随机的读取少量字节的情况下。开启DMA反而效果更差。自然而然的硬件I2C就无人问津了。

qq_32273059的博客 1579

华为昇腾服务器npu中安装paddle,pytorch等环境,训练代码迁移适配等问题记录

参考文档:https://github.com/PaddlePaddle/PaddleCustomDevice/blob/develop/backends/npu/README_cn.md

qq_29220369的博客 4112

MFC添加菜单

MFC添加菜单代码 void CRunSerListCtr::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult) { LPNMITEMACTIVATE pNMItemActivate = reinterpret_cast<LPNMITEMACTIVATE>(pNMHDR); // TODO: 在此添加控件通知处理程序代码 *pResult =...

V1040375575的博客 319

Twincat Scopeview录波中的Ringbuffer设置技巧与常见问题解决

本文深入解析了倍福Twincat Scopeview录波功能中Ringbuffer(环形缓冲区)的核心设置技巧与常见问题解决方案。针对数据丢失、触发时机不准等痛点,详细阐述了缓冲区大小、预触发样本、采样率等关键参数的优化配置,并提供了多通道同步、自动诊断等实战应用指南,帮助工程师高效捕捉和分析PLC数据。

rainy的博客 845

VC++中树形控件CTreeCtrl的使用

VC++中树形控件CTreeCtrl的使用 树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用 BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID ); 创建一

Ryan 的 Blog 4903

基于STM32的Modbus TCP多主站数据监测

Modbus TCP通信协议在STM32上实现,STM32作为服务器采集内部传感器数据,并通过ADC进行转换,存入寄存器。两个PC机作为客户端访问服务器,服务器通过Socket通信实现监听连接,将数据发送给客户端。

hyp12347的博客 4291

PCB作为智能小车底盘的设计方法与工程实践

PCB底盘是一种将机械结构与电子设计深度融合的嵌入式系统集成方案,其本质是利用印制电路板的高精度制造能力(±0.05mm孔位公差)和FR-4材料的结构强度(弯曲强度345MPa),替代传统亚克力或铝合金底盘。该方案通过封装库驱动的正向设计、机械层语义化定义及机电协同布局,实现安装基准统一、共地平面优化与RF天线集成等技术价值。广泛应用于教育机器人、AGV小车、模块化开发平台等对空间紧凑性、量产一致性与电磁兼容性有严苛要求的移动嵌入式场景,尤其适合具备EDA工具使用能力的电子工程师主导的跨学科开发流程。

weixin_36064575的博客 127

VC中树形控件(CTreeCtrl)的使用

转自:http://hi.baidu.com/ewook/item/7e793224d11d24464799627d 这里也是转载的,但目的地址已经无法获取,故只写了这个间接转载的地址。 树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件

klzhangti的专栏 598

K8S部署Java项目 pod的logs报错为:Error: Unable to access jarfile app.jar

每个人都有惰性,但不断学习是好好生活的根本,共勉!

感谢阅读 2600

MFC树形控件(CTreeCtrl)用法(下)

前面一节讲了树形控件Tree Control的简介、通知消息以及相关数据结构,本节继续讲下半部分,包括树形控件的创建、CTreeCtrl类的主要成员函数和应用实例。        树形控件的创建        MFC为树形控件提供了CTreeCtrl类,它封装了树形控件的所有操作。        树形控件的创建也是有两种方式,一种是在对话框模板中直接拖入Tree Contro

6万+

在 SAP BTP 上为应用开启多租户能力:基于 SaaS Provisioning 和 XSUAA 的完整实践指南

本文介绍了在SAP BTP上配置多租户应用的实战指南。主要内容包括: 多租户架构概述:解释provider子账户、consumer子账户和tenant的概念,以及数据隔离机制。 安全配置:在xs-security.json中设置tenant-mode为shared,并为SaaS Provisioning服务添加回调scope授权。 路由配置:通过manifest.yml设置TENANT_HOST_PATTERN来定义多租户访问模式,确保不同租户通过不同子域名访问同一应用。 服务绑定:将XSUAA和SaaS

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 144

SolidWorks_模具设计5_分型线生成

分型线是模具设计的核心要素,直接影响产品质量、脱模可行性和制造成本。本文系统介绍了分型线生成技术,包括三种核心算法:基于凸包的方法适用于简单几何,可见性分析处理复杂曲面,曲率特征优化则能找到自然分界。文章提供了完整的Python实现示例,涵盖点云投影、网格处理和分型线评估等关键技术。通过理解这些原理和方法,工程师可以更高效地设计出满足外观要求、易于加工的分型线方案,显著提升模具设计质量和效率。

H17853509096的博客 178

[MFC]CTreeView树形视图、CTreeCtrl树形控件

1. 树形控件和树形视图:     1) 树形控件在Microsoft Windows95中就已经引入,如文件资源管理器中的树形文件列表就是使用树形控件实现的,这是树形控件最常见的应用;     2) 树形视图就是将整个树形控件作为视图模板的视图,就和之前做过的Phones列表视图一样,直接将CXXXView继承自CTreeCtrl即可;     3) 我们看到的资源管理器的左侧其实就是一个

Lirx_Tech的专栏 1万+

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

vc++树形控件(CTreeCtrl)使用简介

 from:http://blog.youkuaiyun.com/dongle2001/articles/429704.aspx  树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& r

jason's tech blog 2333

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

蓝牙模块HM-10手册

蓝牙模块HM-10手册,该手册对蓝牙模块HM-10进行了详细的介绍和使用方法以及一些AT指令。

树形控件(CTreeCtrl)简介

       树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些

dongle2001的专栏 3392

假人有限元模型

假人模型,车辆碰撞假人有限元模型,适合做乘员安全的研究者利用

MFC树形控件(CTreeCtrl)用法(上)

树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用 BOOL Create( DWORD dwStyle, const RECT& rect, CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的

8210

树形控件CTreeCtrl的使用详解(二)

在MFC中应用CTreeCtrl控件的技巧   首先,我们要创建一个基本对话框的MFC工程MFC_TreeCRTL。然后在资源视图中插入两个Dialog,ID分别为IDD_DIALOG11和IDD_DIALOG211,都更改Style属性为Child,Border属性为None,为它们建立两个类,分别命名为Cdialog11和Cdialog211,并在MFC_TreeCR...

weixin_33690367的博客 281

树形控件CTreeCtrl

树形控件可以用于树形的结构,其中有一个根接点(Root)然后下面有许多子结点,而每个子结点上有允许有一个或多个或没有子结点。MFC中使用CTreeCtrl类来封装树形控件的各种操作。通过调用 BOOL Create( DWORD dwStyle, const RECT& rect,CWnd* pParentWnd, UINT nID );创建一个窗口,dwStyle中可以使用以下一些树形控件的专

Armstronghappy的专栏 881
上一篇: vc++中如何产生任意区间的随机数
下一篇: c++primer学习笔记
skilledprogrammer
博客等级 码龄19年 78粉丝 53原创
评论 2
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值