读书人

vc6.0 为何CTreeCtrl.GetSelectedItem

发布时间: 2012-09-01 09:33:03 作者: rapoo

vc6.0 为什么CTreeCtrl.GetSelectedItem() 取得的是选中之前的item
[code=C/C++]
// 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;

}
[/code]

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


[解决办法]
大致上是这样的:

C/C++ code
CPoint pt;GetCursorPos(&pt);m_tree.ScreenToClient(&pt);HTREEITEM hItem = tree.HitTest(pt);if(NULL != hItem){ ....}
[解决办法]
LS 的正解
也贴个自己的
C/C++ code
    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))    {      .......    } 

读书人网 >VC/MFC

热点推荐