首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > VC/MFC >

vc6.0 为何CTreeCtrl.GetSelectedItem() 取得的是选中之前的item

2012-09-01 
vc6.0 为什么CTreeCtrl.GetSelectedItem() 取得的是选中之前的item[codeC/C++]//TreeCtrl的单击响应函数v

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))    {      .......    } 

热点排行