我发现只有用左键点击树中某个项目时,被点中项才会变成选中项(背景被加亮)
但我想在右键点击树中某个项目时,将被点中的项设为选中(背景被加亮)!
我拦下了 树控件的NM_RCLICK事件,代码如下:
CPoint   point;
CTreeCtrl*  pTree=(CTreeCtrl*) GetDlgItem(IDC_TREE1);
GetCursorPos(&point);
ScreenToClient(&point);
hItem=pTree->HitTest(point,&m_uFlags);  //hItem 总是为NULL,怎么办?
pTree->SelectItem(hItem);
后来我又尝试了其它代码
  CPoint   point;   
  TVHITTESTINFO   HitTestInfo;   
  GetCursorPos(&point);   
  m_Tree_Directory.ScreenToClient(&point);   
  HitTestInfo.pt   =   point;   
    
  HTREEITEM   hItem   =   m_Tree_Directory.HitTest(&HitTestInfo);   //hItem仍然为NULL

解决方案 »

  1.   

    ScreenToClient(&point); 
    hItem=pTree->HitTest(point,&m_uFlags); //hItem 总是为NULL,怎么办? 
    你这里光ScreenToClient是不够的。这时的point相对的原点是你的对话框,而不是树控件的起点。所以要再进行一步坐标变换。参考如下:
    void CAboutDlg::OnClickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
    {
        NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; 
        CPoint pt;
        GetCursorPos(&pt);
        ScreenToClient(&pt);
        CRect rc;
        m_Tree1.GetWindowRect(rc);
        ScreenToClient(rc);
        pt.x -= rc.left;
        pt.y -= rc.top;
        HTREEITEM hItem = m_Tree1.HitTest(pt);
        CString sInfo = m_Tree1.GetItemText(hItem);
        AfxMessageBox(sInfo);
        *pResult = 0;
    }
      

  2.   


    DING    需要转换到树控件窗口
      

  3.   

    顶1楼!另外也可以这样:CPoint   point; 
    CTreeCtrl*  pTree=(CTreeCtrl*) GetDlgItem(IDC_TREE1); 
    GetCursorPos(&point); pTree->ScreenToClient(&point); hItem=pTree->HitTest(point,&m_uFlags); //hItem 总是为NULL,怎么办? 
    pTree->SelectItem(hItem);