zoukankan      html  css  js  c++  java
  • 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;
    }
  • 相关阅读:
    spin_lock &amp; mutex_lock的差别?
    Java拾遗(一):浅析Java子类和父类的实例化顺序 及 陷阱
    Android ViewPager使用具体解释
    大数运算
    fragment 中利用spinner实现省市联动
    秒杀多线程第四篇 一个经典的多线程同步问题
    Ewebeditor最新漏洞及漏洞大全
    轻松设置百度搜索手写输入
    Rational Rose 2007 &amp;Rational Rose 2003 下载及破解方法和汉化文件下载
    svm中的数学和算法
  • 原文地址:https://www.cnblogs.com/lujin49/p/4771765.html
Copyright © 2011-2022 走看看