// TreeCtrl的单击响应函数
void CCapture2Dlg::OnClickTreeStudents(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
HTREEITEM hItem = m_pStudentTree->GetSelectedItem();
if(hItem != m_hRoot) {
    CString csId;
    csId.Format("%s", m_pStudentTree->GetItemText(hItem));
    MessageBox(csId);
} *pResult = 0;

}
为什么我用GetSelectedItem()方法取得的是单击之前选中的函数呢?
例如:有两个节点,文本分别为 a 和 b,其中a处于选中状态,我点击b后弹出的是a的内容,是焦点离开的item的内容而不是当前焦点item的内容

解决方案 »

  1.   

    大致上是这样的:
    CPoint pt;
    GetCursorPos(&pt);
    m_tree.ScreenToClient(&pt);
    HTREEITEM hItem = tree.HitTest(pt);
    if(NULL != hItem)
    {
     ....
    }
      

  2.   

    LS 的正解 
    也贴个自己的 int i;
    UINT hFlag;
    CPoint pt;
    GetCursorPos(&pt); m_TreeCtrl.ScreenToClient(&pt);
    HTREEITEM hItem = m_TreeCtrl.HitTest(pt,&hFlag);
    if ((hItem!=NULL)&&(TVHT_ONITEM&hFlag))
    {
          .......
    }