我在我的程序的树型控件的右击事件中这样写: void CTest01Dlg::OnRclickTree(NMHDR *pNMHDR, LRESULT *pResult)
{
CMenu *menu, *popup;
CPoint point;
menu = new CMenu();
GetCursorPos(&point);
CPoint local =point;
ScreenToClient(&local);
UINT uFlags = 0;
hTreeCurrent = m_TestTree.HitTest(local, &uFlags);
}我的目的很明显,是要通过右击得到树结点,但是m_TestTree.HitTest(local, &uFlags)返回的是空值,有哪位知道我错在哪里了吗?我快被这个烦死了,谢谢。

解决方案 »

  1.   

    不要ScreenToClient(&local);试试
      

  2.   

    void CTest01Dlg::OnRclickTree(NMHDR *pNMHDR, LRESULT *pResult)
    {
    CMenu *menu, *popup;
    CPoint point;
    menu = new CMenu();
    GetCursorPos(&point);
    CPoint local =point;
    m_TestTree.ScreenToClient(&local);//要Tree本身的Client坐标
    UINT uFlags = 0;
    hTreeCurrent = m_TestTree.HitTest(local, &uFlags);
    }
      

  3.   

    HitTest(local, &uFlags)用的坐标是相对于Tree控件中的,你在函数的是相对于对话框的,所以取不到.
      

  4.   

    CTreeCtrlEx::OnRButtonDown(UINT nFlags, CPoint point) 
    {
    UINT uFlags;         hTreeCurrent = HitTest(point, &uFlags);

    CTreeCtrl::OnLButtonDown(nFlags, point);
    }
    //这是我的一个原代码 COPY to here ,and you can use it.(CTreeCtrlEx is 继承)
    //hTreeCurrent 定义从全局的