• VC++ CTreeCtrl 使用NM_CLICK和TVN_SELCHANGED


    //这是当CTREECTRL控件点击时NM_CLICK的处理函数
    void CDriverSelCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
    {
        CPoint curPoint;
        UINT nFlags;
        HTREEITEM hItem;
    
        GetCursorPos(&curPoint); //当前点坐标
        ScreenToClient(&curPoint); //屏幕坐标转换为TREE内坐标
        hItem = HitTest(curPoint, &nFlags); //坐标是否有ITEM
    
        if (hItem && (TVHT_ONITEM & nFlags)) //判断是否有HTREEITEM
        {
            this->SelectItem(hItem);//在这里处理点击后的结果
        }
    // TODO: 在此添加控件通知处理程序代码 *pResult = 0; }

    在这里需要指出 HitTest 函数不但可以检测出是否在item上 也可以检测出 位于 item项的 哪个位置请看 MSDN的说明

    ValueMeaning
    TVHT_ABOVE

    Above the client area.

    TVHT_BELOW

    Below the client area.

    TVHT_NOWHERE

    In the client area, but below the last item.

    TVHT_ONITEM

    On the bitmap or label associated with an item.

    TVHT_ONITEMBUTTON

    On the button associated with an item.

    TVHT_ONITEMICON

    On the bitmap associated with an item.

    TVHT_ONITEMINDENT

    In the indentation associated with an item.

    TVHT_ONITEMLABEL

    On the label (string) associated with an item.

    TVHT_ONITEMRIGHT

    In the area to the right of an item.

    TVHT_ONITEMSTATEICON

    On the state icon for a tree-view item that is in a user-defined state.

    TVHT_TOLEFT

    To the left of the client area.

    TVHT_TORIGHT

    To the right of the client area.

    由此可以更加灵活的使用的CTREECTL控件了

    例如下面 例子:

    void CDriverSelCtrl::OnNMClick(NMHDR *pNMHDR, LRESULT *pResult)
    {
        CPoint point;
        UINT uFlag;
        BOOL bCheck;
    
    
        GetCursorPos(&point);
        CTreeCtrl::ScreenToClient(&point);
        HTREEITEM hTree = CTreeCtrl::HitTest(point, &uFlag);
    
    if (hTree && (TVHT_ONITEMSTATEICON & uFlag))
        {
            CTreeCtrl::SelectItem(hTree);
            bCheck = CTreeCtrl::GetCheck(hTree);
    
            
        }
    
    
        // TODO:  在此添加控件通知处理程序代码
        *pResult = 0;
    }

     下面是关于 选项改变时的函数

    //这是当控件的选择发生变化时的处理函数
    void CDriverSelCtrl::OnTvnSelchanged(NMHDR *pNMHDR, LRESULT *pResult)
    {    
    
    LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    pNMTreeView->itemNew //选中HTREEITEM
    pNMTreeView->itemOld //上次选中HTREEITEM
    // TODO:  在此添加控件通知处理程序代码
    *pResult = 0;
    }
  • 相关阅读:
    mdx中nonempty 和 non empty的区别
    shrink log和查询数据库 backup,restore,shrink 进度 和 还原历史 的sql (for sqlserver)re
    方差分析 概述
    从 高斯 到 正态分布 到 Z分布 到 t分布
    数据集市 数据仓库 Immon Kimball模型的概念说明
    【React Native 实战】微信登录
    【React Native 实战】商品分类
    一步步学习PHP笔记(李炎恢瓢城web俱乐部-多用户留言系统)01
    wampserver下打开phpMyAdmin出现403错误的问题解决方法
    windows 支持curl命令
  • 原文地址:https://www.cnblogs.com/lujin49/p/4771765.html
Copyright © 2020-2023  润新知