前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >MFC中树控件节点的点击位置的判断,涉及CTreeCtrl::HitTest()方法的参数值pFlags的含义区别及用法(pFlags值测试)

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

作者头像
acoolgiser
发布2019-01-17 10:02:41
1.4K0
发布2019-01-17 10:02:41
举报
文章被收录于专栏:acoolgiser_zhuanlanacoolgiser_zhuanlan

上一篇博客https://cloud.tencent.com/developer/article/1383940提到了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来测试,代码如下:

代码语言:javascript
复制
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"));

    }

}

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

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
原始发表:2018年08月01日,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体分享计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
相关产品与服务
区块链
云链聚未来,协同无边界。腾讯云区块链作为中国领先的区块链服务平台和技术提供商,致力于构建技术、数据、价值、产业互联互通的区块链基础设施,引领区块链底层技术及行业应用创新,助力传统产业转型升级,推动实体经济与数字经济深度融合。
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档