我响应了右键单击树状控件的消息,我这样的得到单击的项:
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM item= pNMTreeView->itemNew.hItem;
可是item是空,于是我又换一种方法
UINT uFlags;
CPoint pos;
GetCursorPos(&pos);
  HTREEITEM item=m_usertree.HitTest(pos,&uFlags);
可是item依然是空,不要怀疑我是否点中了控件里面的项。
   真是百思不得其解,有人遇到过吗?

解决方案 »

  1.   

    after u use getcursorpos
    call screentoclient(m_hWnd);
    HitTest need client pos
      

  2.   

    CPoint mousepoint=0;定义成全局变量
    //HTREEITEM item=m_usertree.HitTest(mousepoint,&uFlags);
    void CLeftView::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    mousepoint=point;
    CTreeView::OnRButtonDown(nFlags, point);
    }NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    HTREEITEM item= pNMTreeView->itemNew.hItem;
    UINT uFlags;
    HTREEITEM item=m_usertree.HitTest(mousepoin,&uFlags);
    即可完成
      

  3.   

    其中HitTest(pos,&uFlags)
    的第一个参数是你右键事件传入的参数。笨蛋给分吧
      

  4.   

    Free_Man(浪迹天涯):
    每个人都有不知道的地方,笨蛋最好少用点!
      

  5.   

    不需要转换,直接用
    UINT flag;
    flag = TVHT_ONITEM;
    HTREEITEM htItem = m_TreeCtrl->HitTest(point, &flag);
    if( htItem != NULL )
    m_TreeCtrl->SelectItem(htItem);
      

  6.   

    TO Free_Man(浪迹天涯):
    我只是不熟系界面编程而已,核心和驱动我都不弱,凭我用SDK,C写的几万行的网络程序(我可以不客气的说,效率绝对是同类软件世界第一,能把完成端口用C演绎的这么好的,没几个,--如果你看了我的程序,你就知道那些用C++写的此类程序和我的程序的差距;优化到骨头里的文件操作,可以说也没能几个能用的和普通的文件操作一样),不能说明别的什么把,最起码能说明我不是笨蛋。
    lid617(梦幻)说的对
    每个人都有不知道的地方。不要动不动就瞧不起别人。