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.csdn.net/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"));

    }

}

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

 

CKS-CN考试之路----11 显然是alpine-b的镜像有libcrypto3-3.1.4-r5。新版本发布老版本会被回收,此时pod只剩下2个container。我们依次测试是哪个镜像里包含libcrypto3。可以看到alpine的pod有3个副本. 阅读详情

相关推荐

YOLOv11改进策略【小目标改进】| 添加专用于小目标的检测层 附YOLOv1~YOLOv11的检测头变化详解

在目标检测领域,小目标检测一直是一个具有挑战性的问题。算法以其高效快速的特点受到广泛关注,然而在面对小目标时,仍存在一些局限性。本文将介绍如何在中添加小目标检测层,以提高对小目标的检测能力。原始模型结构如下:详细内容参考:YOLOv11原始模型结构介绍 二、有效特征层对应的检测头类别 2.1 P3/8 - small检测头 原始模型中的对应的检测头主要用于检测相对较小的目标。其特征图大小相对较大,空间分辨率较高。 适合检测尺寸大概在到像素左右的目标。 2.2 P4/16 - medium检测头 这个检

Limiiiing的博客 8694

mfc hittest 使用方法

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

普雷的博客 4298

UL 746A-2025 聚合物材料标准 - 短期性能评估.rar

UL 746A-2025 聚合物材料标准 - 短期性能评估.rar

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

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

acoolgiser的博客 4762

MFC函数随看随记

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

u011365452的专栏 895

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

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

weixin_30877493的博客 297

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

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

liuxiaomao1988的专栏 2647

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

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万+

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

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

weixin_54623072的博客 3432

CTreeCtrl 节点选择问题

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

angellove156的专栏 2095

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

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

欧特GO 5490

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 3396

三态树的实现

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

孟游的专栏 3210

MFC 中的NMHDR、LPNMTREEVIEW、TVITEM

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

acoolgiser的博客 1941

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

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

rdc2008的专栏 744

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

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

明月清风 精进不止 6589

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

CTreeCtrl获得鼠标点击时的节点

  原文链接: http://blog.csdn.net/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的专栏 2355
上一篇: MFC树点击事件中CTreeCtrl::HitTest用法以及uFlag参数的不同值的含义
下一篇: 吐槽一下博客乱象。。。
acoolgiser
博客等级 码龄10年 179粉丝 146原创
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值