在鼠标右击消息中,先要取得鼠标右击的项目位置,然后在选择项目:
UINT uFlags;
HTREEITEM htItem = m_pTreeCtrl->HitTest(point, &uFlags);
if( (htItem != NULL) && (uFlags & TVHT_ONITEM))
{
    m_pTreeCtrl->Select(htItem, TVGN_CARET);
    ......
}

解决方案 »

  1.   

    void CViewFileDir::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    // TODO: Add your control notification handler code here

    CPoint pt;
    GetCursorPos(&pt);
    CPoint pt1=pt;
    ScreenToClient(&pt1);
    UINT uFlag;
    HTREEITEM  nHitItem =GetTreeCtrl().HitTest(pt1,&uFlag); 
    if(nHitItem!=NULL)
    {
    GetTreeCtrl().SelectItem(nHitItem); 
    }
    *pResult = 0;
    }
      

  2.   

    重载OnRclickTree(NMHDR* pNMHDR, LRESULT* pResult) // 得到当前点击的项目
    UINT nFlag;
    CPoint Point;
    HTREEITEM Item;
    GetCursorPos( &Point );
    *1*ScreenToClient( &Point );
    *2*MapWindowPoints( &m_Tree, &Point, 1 );
    Item = m_Tree.HitTest( Point, &nFlag );好像只要用*1*就可以了!