MFC中树控件节点的点击位置的判断,涉及CTreeCtrl::HitTest()方法的参数值pFlags的含义区别及用法(pFlags值测试)

MFC 之树控件篇 CTreeCtrl m_wndMyTree; 1) 取得树的当前选中节点: HTREEITEM hSelectedItem = m_wndMyTree.GetSelectedItem(); 2) 取得指定节点的标签值(也就是Caption): CString strCaption = m_wndMyTree.GetItemText(hSelectedItem); 3) 记住:MFC中的树 阅读详情

上一篇博客https://blog.youkuaiyun.com/acoolgiser/article/details/81330200提到了HitTest()方法,但是还没有说清楚用法,本文再通过测试来深入理解。

 

 首先看一下MSDN中关于CTreeCtrl::HitTest()方法的用法说明:

https://msdn.microsoft.com/zh-cn/library/x0w7ft34.aspx

其中,pFlags 参数包含一个值来指定点的位置。其可能的值有很多,如下表:

值

含义

TVHT_ABOVE

在客户端区域。

TVHT_BELOW

在工作区中。

TVHT_NOWHERE

在工作区,但是,在最后一项下。

TVHT_ONITEM

在位图或标签与项目。

TVHT_ONITEMBUTTON

在按钮上与项目。

TVHT_ONITEMICON

在位图与项目。

TVHT_ONITEMINDENT

在缩进与项目。

TVHT_ONITEMLABEL

在标签(字符串)与项目。

TVHT_ONITEMRIGHT

在项目右边的区域。

TVHT_ONITEMSTATEICON

在一个用户定义状态的树视图项的状态图标。

TVHT_TOLEFT

在工作区左边。

TVHT_TORIGHT

在工作区的右侧。

 看了此表还是一脸懵B,通过MessageBox来测试,代码如下:

void CTreeView::OnNMClickTree(NMHDR *pNMHDR, LRESULT *pResult)

{

    // TODO: Add your control notification handler code here

    CPoint point;

    UINT uFlag; // 接收有关点击测试的信息

    GetCursorPos(&point); // 获取屏幕鼠标坐标

    m_tree.ScreenToClient(&point);

    // 点击测试,是否点击了树节点

    HTREEITEM hItem = m_tree.HitTest(point, &uFlag);



    if (NULL != hItem)
    {
        if (uFlag&TVHT_ABOVE)
            MessageBox(_T("L1:TVHT_ABOVE"));
        if (uFlag&TVHT_BELOW)
            MessageBox(_T("L2:TVHT_BELOW"));
        if (uFlag&TVHT_NOWHERE)
            MessageBox(_T("L3:TVHT_NOWHERE"));
        if (uFlag&TVHT_ONITEM)
            MessageBox(_T("L4:TVHT_ONITEM"));
        if (uFlag&TVHT_ONITEMBUTTON)
            MessageBox(_T("L5:TVHT_ONITEMBUTTON"));
        if (uFlag&TVHT_ONITEMICON)
            MessageBox(_T("L6:TVHT_ONITEMICON"));
        if (uFlag&TVHT_ONITEMINDENT)
            MessageBox(_T("L7:TVHT_ONITEMINDENT"));
        if (uFlag&TVHT_ONITEMLABEL)
            MessageBox(_T("L8:TVHT_ONITEMLABEL"));

        if (uFlag&TVHT_ONITEMRIGHT)
            MessageBox(_T("L9:TVHT_ONITEMRIGHT"));

        if (uFlag&TVHT_ONITEMSTATEICON)
            MessageBox(_T("L10:TVHT_ONITEMSTATEICON"));

        if (uFlag&TVHT_TOLEFT)
            MessageBox(_T("L11:TVHT_TOLEFT"));

        if (uFlag&TVHT_TORIGHT)
            MessageBox(_T("L12:TVHT_TORIGHT"));

    }

}

一番尝试后,对各个参数的含义一清二楚。

 

从0到1打造工业级上位机:通信协议到架构设计的实战全流程 作为一名在工控领域摸爬滚打十余年的开发者,前阵子刚帮一家新能源工厂完成了一套工业上位机系统的从0到1搭建。从最初和PLC通信联调时的“连不上、传错数”,到最终系统7×24小时稳定运行,踩过的坑、攒下的实战经验,今天就毫无保留地拆解给各位同行。这篇文章会从通信层、数据层、UI层到架构层逐层深入,全是工业现场验证过的干货,新手也能跟着落地。 阅读详情

相关推荐

华硕笔记本全硬盘恢复原厂状态 实机操作,MYASUS IN WINRE恢复,ASUS RECOVERY恢复

本教程的前提的在之前就备份了原厂的RECOVERY分区,RESTORE分区,MYASUS分区 如果这些分区都没有的话那就只能找同型号笔记本的朋友要一份了,或者去售后,告诉他这三个分区都要恢复。一般售后为了节约硬盘空间,不会给你恢复restore分区,这个分区有将近20G。 我机器撒天选2 i7-11800H,3060,32G,512GB,型号FX506HM 这篇教程先说全格式化怎么做,下次有空再说免格式化怎么弄。下面开始。 首先首先你的先做给优盘或者移动硬盘做一个PE。网上做PE启动盘的教程很多,这

JamesCurtis的博客 3万+

mfc hittest 使用方法

1.背景 HitTest为命中测试的意思。在使用MFC编写程序的时候,在树形视图以及列表视图中通常会涉及到需要获得鼠标当前位置所对应的元素。这种通过光标坐标位置来获得相应元素项的操作我们称之为命中测试。2.相关函数 GetMessagePos() :可以获得当前光标的坐标信息 GetCursorPos() :该函数检取光标位置

普雷的博客 4306

半导体关键系统之RMS浅谈

这种系统还要求设备在设备上的配方发生变化时通知工厂主机,并需要与EAP(Equipment Automation Process)联结,旨在实时管控自动化系统所用配方与用户当初的设定是否匹配,从而使得自动化系统所用的配方更加趋于安全。例如,制药行业中的药品生产管理系统(GMP),它对药品的生产过程进行严格控制,包括原材料的采购、生产工艺流程、质量控制等方面。这些系统通常与企业的生产系统集成,能够对产品的配方进行精细化管理,包括配方的设计、试验、验证、生产等环节。

阿拉伯梳子的专栏 6160

MFC树点击事件中CTreeCtrl::HitTest用法以及uFlag参数的不同值的含义

CTreeCtrl::HitTest的语法结构: ​​​​​​​ HTREEITEM HitTest( CPoint pt, UINT* pFlags = NULL ) const; HTREEITEM HitTest( TVHITTESTINFO* pHitTestInfo ) const;  参数的取值及含义: Value 含...

acoolgiser的博客 4765

QEMU pcie config空间访问机制

而pci_host_conf/data_le_ops的定义是在hw/pci/pci-host.c里,对于0xCF8端口的处理,因为是地址选通,所以只需要在write的时候记录、read的时候返回记录的值即可。而pci_host_config_write/read_common接口,在前256Bconfig空间的模拟中,也同样是会调用这个接口,所以后续的处理都是一样的。这是真实的硬件设计,而对于QEMU+KVM的虚机场景,显然是要基于硬件实现和虚拟化的需求设计虚机访问config空间的完整流程。

leiyanjie8995的博客 1953

关于 SAP Fiori Elements 开发项目里的本地 annotation.xml 文件

文件通过引用 SAP 提供的标准词汇表和本地 OData 服务的元数据,为 Fiori Elements 应用定义了一个基础的注解结构。开发者可以在此基础上添加具体的注解,以满足特定的业务需求和界面定制。文件用于定义本地注解,以补充或覆盖来自后端 OData 服务的元数据。元素内添加具体的注解,以定制 Fiori Elements 应用的界面和行为。的架构,用于在本地注解中定义实体、类型和注解。这使得在本地注解中可以引用该 OData 服务的实体和类型。等,用于控制界面元素的显示和行为。

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

MFC函数随看随记

POINT pt;     GetCursorPos(&pt);//该函数检取光标的位置,以屏幕坐标表示     UINT uFlags;     ScreenToClient(&pt);  //该函数把屏幕上指定点的屏幕坐标转换成用户坐标。     MapWindowPoints(this, &pt,1);//该函数把相对于一个窗口的坐标空间的一组点映射成相对于另一窗口的坐标空间的一组点

u011365452的专栏 895

96.在 Vue 3 中使用 OpenLayers 探究加载 Point、Polygon 的极限

在前端 GIS(地理信息系统)开发中,OpenLayers 作为一个功能强大的 Web 地图库,广泛用于加载地图、渲染矢量数据(点、线、面)、叠加图层等场景。然而,当涉及到。

小彭的博客 1157

树形视图和列表视图中的HitTest

 1、引言 HitTest为命中测试的意思。在使用MFC编写程序的时候,在树形视图以及列表视图中通常会涉及到需要获得鼠标当前位置所对应的元素。这种通过光标坐标位置来获得相应元素项的操作我们称之为命中测试。 在树形视图中使用HTREEITEM类型变量来表示视图中的元素项,而在列表视图中可以直接使用整型变量的编号来表示列表视图中对应的元素项。通过调用...

weixin_30877493的博客 298

SAP采购申请审批策略配置简介

SAP采购申请审批策略配置简介 1、CT04创建特征

我小时候很黑的博客 8162

【2023校招】网易雷火_研发岗_笔试题解

几个月没写题,果然水平不在线了hh,AK更难实现喽,当天只AK了疯狂游戏; 题目描述和数据等尽量多的CV到了DEVC里,可能不够细节和准确; 下面进入正题,分享我们此次笔试的题目描述和代码设计吧~.........

米莱虾 4544

MFC API——》WM_NCHITTEST、OnNcHitTest (CPoint point) 点击鼠标时产生的消息

这个消息比较实用也很关键,它代表非显示区域命中测试。这个消息优先于所有其他的显示区域和非显示区域鼠标消息。其中lParam参数含有鼠标位置的x和y屏幕坐标,wParam 这里没有用。 Windows应用程序通常把这个消息传送给DefWindowProc,然后Windows用WM_NCHITTEST消息产生与鼠标位置相关的所有其他鼠标消息。通俗的讲从消息产生消息。 case WM_NCHITTE

liuxiaomao1988的专栏 2655

杰理SDK入门教程(一):编译环境的安装和程序下载

本文档提供了杰理SDK在Windows系统下的开发环境配置与代码编译指南。主要内容包括:1) 开发环境安装步骤,需下载Code::Blocks和杰理工具链;2) 编译过程中常见问题的解决方案,如安全警告提示和链接文件缺失问题;3) 代码编译流程说明,包括打开工程、连接开发板、执行编译等步骤。文档特别强调了强制升级模式的操作方法,并指出需避免点击运行/调试按钮。最后提示了杀毒软件可能误报工具链的注意事项。

qq_42014563的博客 2741

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的博客 3140

Probability and Statistics - 4th edition

Probability and Statistics - 4th edition

WINCC7.3破解文件

WINCC7.3硬件够破解文件,有需要的下载!WINCC7.3硬件够破解文件,有需要的下载!

MFC CTreeCtrl获得鼠标点击时的节点值

1、添加图标   HICON icon[10];  icon[0]=AfxGetApp()->LoadIcon(IDI_ICON1);  icon[1]=AfxGetApp()->LoadIcon(IDI_ICON5);  m_imagelist.Create(16,16,ILC_COLOR32| ILC_MASK,7,7);//16*16的图标,7*7为该list最多能容纳的图标数。

lcalqf的专栏 1万+

jre9下载 jdk9

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

CTreeCtrl树控件:如何给MFC中的CTreeCtrl树控件添加右键菜单及使用

1、头文件中: // 可以用来屏蔽操作的消息 virtual BOOL PreTranslateMessage(MSG* pMsg); // 右击树控件的节点弹出菜单 afx_msg void OnRclickTreeObjects(NMHDR* pNMHDR, LRESULT* pResult); //展开树控件某一结点下的所有子节点(递归函数) void ExpandAllTreeI...

欧特GO 5499

假人有限元模型

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

CTreeCtrl 节点选择问题

一、问题说明          树形控件,单击某个节点弹出相应的对话框 二、问题处理          起先使用了CTreeCtrl的OnSelchangedOperate这个事件,实际操作中出现了问题:          二次单击时对话框不能显示,上网查找资料,才明白二

angellove156的专栏 2096

MFC 树形控件Tree Control,设置选中、焦点注意事项

1.SelectItem()函数设置参数节点被选中 2.利用PostMessage();实现焦点显示和取消。 3.需要注意PostMessage();虽然取消了焦点高亮,但之前被选中的节点仍然处于选中状态,再次点击相同节点,无法出发onselchange()消息;可以通过添加onclick()消息;来触发再次选中。但必须注意仅使用onclick()消息;点击时,无法正确获取选中节点,需要在onclick()消息中添加相同的操作,来实现焦点改变。 4.onDbclick()消息不存在3中问题。 ..

weixin_54623072的博客 3438

CTreeCtrl树控件:如何给MFC中的CTreeCtrl树控件添加复选框及选中状态

1、效果如下: 2、首先需要重写树控件类 CCheckTreeCtrl.h #pragma once typedef enum TREE_STATE { STATE_NONE, STATE_UNCHECKED, STATE_CHECKED, STATE_INTERMEDIATE, STATE_DISABLED }; //当树中某项的选中状态被改变时,会触发NM_CHECKSTATECHANGED消息,数据类型为TREEINFO //ON_NOTIFY(NM_CHECKSTATECHANG

欧特GO 3413

三态树的实现

    三态树节点有三种状态,分别对应:子节点全部选中、子节点部分选中、没有一个子节点被选中。    一.消息响应函数    这里需要对三个消息进行响应,分别是:NM_CLICK、WM_LBUTTONDOWN、WM_KEYDOWN,对应的响应函数分别是OnStateIconClick、OnLButtonDown和OnKeyDown。    1.OnLButtonDown    

孟游的专栏 3213

MFC 中的NMHDR、LPNMTREEVIEW、TVITEM

树控制的数据结构 在使用树控制时需要了解两个个非常重要的数据结构TV_ITEM和TV_INSERTSTRUCT,前一个数据结构是用来表示树控制的树项信息,后一个数据结构是用来定义将树项增加到数据控制中所需要的数据内容。另外,还需要NM_TREEVIEW、 TV_DISPINFO和TV_HITTESTINFO三个数据结构,这几个数据结构的定义方法如下: ①基本数据项结构 typedef str...

acoolgiser的博客 1945

树视列表和树控列表【转】

(一)树控制的主要功能      树控制和视(Tree Control&View)主要用来显示具有一定层次结构的数据项,如资源管理器中的磁盘目录等,以供用户在其中进行各种选择。树控制中的每个数据项包括数据项名      称的文本字符串和用于表示该数据项的图像,每个数据项下

rdc2008的专栏 745

VS2010/MFC 获取ListControl鼠标点击位置

1、引言        HitTest是命中测试的意思。在使用MFC编程的时候,在列表视图中通常会涉及到需要获取鼠标当前位置所对应的元素。这种通过光标位置来获得相应元素项的操作我们称之为命中测试。 2、获取光标位置 网上有人这样处理:    DWORDdwPos = ::GetMessagePos();                                 //获得包含坐标信

明月清风 精进不止 6593

c语言中check函数,c中checkbox的用法

c中checkbox的用法的用法你知道吗?下面小编就跟你们详细介绍下c中checkbox的用法的用法,希望对你们有用。c中checkbox的用法的用法如下:1. 消息事件(1)鼠标点击当前ITEM的CHECKBOX:引发NM_CLICK事件并传递TVHT_ONITEMSTATEICON。(2)鼠标点击当前ITEM的TEXT:引发NM_CLICK事件。(3)鼠标点击新ITEM的CHECKBOX:引发...

weixin_31742871的博客 3930

CTreeCtrl获得鼠标点击时的节点

  原文链接: http://blog.youkuaiyun.com/lcalqf/article/details/21321923 1、添加图标 HICON icon[10]; icon[0]=AfxGetApp()->LoadIcon(IDI_ICON1); icon[1]=AfxGetApp()->LoadIcon(IDI_ICON5); m_imagelist.Create(1...

weixin_34275734的博客 270

VC常用控件用法

chunseye的专栏 2357
上一篇: MFC树点击事件中CTreeCtrl::HitTest用法以及uFlag参数的不同值的含义
下一篇: 吐槽一下博客乱象。。。
acoolgiser
博客等级 码龄11年 179粉丝 146原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值