CTreeView右クリックポップアップメニュー
1499 ワード
今日CTreeViewでノードを右クリックしてメニューをポップアップする操作をしたとき、戻ってきたHTREEITEMハンドルはいつも空の値で、何が原因なのか分かりません.プログラムは単一ドキュメントで、次の方法を使用します.
右クリックで返されるhItemは常に空です.今まで原因を知らなかった.
この方法では、ノードを右クリックする前に、選択したノードを左クリックし、右クリックする必要があります.右クリックメニューが表示されます.
POINT point;
UINT uFlags;
GetCursorPos(&point);
CTreeCtrl &pCtrl = GetTreeCtrl();
pCtrl.ScreenToClient(&point);
HTREEITEM hItem = pCtrl.HitTest(point, &uFlags);
右クリックで返されるhItemは常に空です.今まで原因を知らなかった.
void CMyTreeView::OnNMRClick(NMHDR *pNMHDR, LRESULT *pResult)
{
/*
NM_TREEVIEW* pTreeView = (NM_TREEVIEW*)pNMHDR;
HTREEITEM hItem = pTreeView->itemNew.hItem;
*/
HTREEITEM hSel = GetTreeCtrl().GetSelectedItem();
if (hSel != NULL )
{
HTREEITEM hChildItem = GetTreeCtrl().GetChildItem(hSel);
if (!hChildItem)// ,
{
CString strSel = GetTreeCtrl().GetItemText(hSel);
strFileName = strSel;
strItemPath = strSel;
HTREEITEM hParentItem = GetTreeCtrl().GetParentItem(hSel);
while (hParentItem)
{
strItemPath = _T("\\")+strItemPath;
strSel = GetTreeCtrl().GetItemText(hParentItem);
strItemPath = strSel+strItemPath;
hParentItem = GetTreeCtrl().GetParentItem(hParentItem);
}
}
}
CMenu Menu,*pSubMenu;
Menu.LoadMenu(IDR_MENU1);
pSubMenu = Menu.GetSubMenu(0);
CPoint Pt;
GetCursorPos(&Pt);
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,Pt.x,Pt.y,this);
*pResult = 0;
}
この方法では、ノードを右クリックする前に、選択したノードを左クリックし、右クリックする必要があります.右クリックメニューが表示されます.