CTreeCtrl点击获得选中项

it2022-05-05  112

相应TVN_SELCHANGED可以得到选中的项,在相应函数内如下:

LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);

CString strSelItemTest = m_mapTreeCtrl.GetItemText(pNMTreeView->itemNew.hItem);

可以得到选中的项,但这里有一个问题,就是我点击的选中项没有改变时,就触发不了这个函数。

所以如果每次点击到项上都要得到选中项,相应左右健单双击比较好NM_CLICK    NM_RCLICK    NM_DBCLICK     NM_RDBCLICK

但是在这几个相应函数里使用

LPNMTREEVIEW pNMTreeView = reinterpret_cast<LPNMTREEVIEW>(pNMHDR);

CString strSelItemTest = m_mapTreeCtrl.GetItemText(pNMTreeView->itemNew.hItem);

得到的是上次选中的项,而不是当前选中项

可以这样解决:

在这几个相应函数里:

DWORD dwpos = GetMessagePos();   TVHITTESTINFO ht = {0};  

ht.pt.x = GET_X_LPARAM(dwpos);ht.pt.y = GET_Y_LPARAM(dwpos);::MapWindowPoints(HWND_DESKTOP,pNMHDR->hwndFrom,&ht.pt,1); //把屏幕坐标转换成控件坐标

TreeView_HitTest(pNMHDR->hwndFrom,&ht);   //确定点击的是哪一项

CString strSelItemTest = m_mapTreeCtrl.GetItemText(ht.hItem);m_mapTreeCtrl.Select(ht.hItem, TVGN_CARET);

转载于:https://www.cnblogs.com/jingdian1956/p/3188575.html


最新回复(0)