MFC中,如何知道TreeCtrl中现在点击的是哪一项?
我看过其它的帖子,有的说用pTreeCtrl->pGetSelectedItem()。可这个语句要放在什么地方呢?
我试过把它放在单击事件NM_CLICK里,但单击时获得的却是上一次点击的那一项。在鼠标按下的时候会先处理CLICK事件,而这时的焦点还在上一次点击的项那里,所以这样就只能获得上一次点击的那一项。
谁能告诉我,怎么才能获得现在点击的这一项?
如果有代码,还希望能写上注释,我是新手。
谢谢!

解决方案 »

  1.   

    如果想得到当前被选择的项,用GetSelectedItem函数; 如果想得到鼠标所在位置的项,用 HitTest函数 。具体用法见MSDN
      

  2.   

    响应TreeCtrl的TVN_SELCHANGED消息。
    void CTestDlgDlg::OnTvnSelchangedTree1(NMHDR *pNMHDR, LRESULT *pResult)
    {
            LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);
    // TODO: Add your control notification handler code here *pResult = 0;
    }pNMTreeView里包括了上一次选中的项和当前选中的项。
      

  3.   

    在NM_CLICK通知消息的lParam参数指向的是一个NMTREEVIEW结构,从这个结构的itemNew很容易确定是哪一项
      

  4.   

    响应TVN_SELCHANGED消息
    void CMainTreeCtrl::OnSelchanged(NMHDR* pNMHDR, LRESULT* pResult) 
    {
    NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR;
    // TODO: Add your control notification handler code here

    HTREEITEM hSubItem = GetSelectedItem();
    m_strCurSel = GetItemText(hSubItem);         //m_strCurSel就是当前选择了哪项的内容
    *pResult = 0;
    }
      

  5.   

    响应TVN_SELCHANGED消息能得到我想要的结果,谢谢各位!