[英]CTreeCtrl HitTest returning NULL MFC
我正在使用VS2008開發MDI應用程序。 我在對話框上創建了2個樹控制。
右鍵單擊時,第一個樹控件顯示一個菜單,但第二個樹控件則沒有。
這是我的代碼:
BEGIN_MESSAGE_MAP(CSignalWindow, CFormView)
ON_NOTIFY(NM_RCLICK, IDC_TREE_PROCDATA_WR, &CSignalWindow::OnNMRClickTreeProcdataWr)
ON_NOTIFY(NM_RCLICK, IDC_TREE_PROCDATA_RD, &CSignalWindow::OnNMRClickTreeProcdataRd)
END_MESSAGE_MAP()
void CSignalWindow::OnNMRClickTreeProcdataRd(NMHDR *pNMHDR, LRESULT *pResult)
{
DisplayProcDataMenuItem(true);
*pResult = 0;
}
void CSignalWindow::OnNMRClickTreeProcdataWr(NMHDR *pNMHDR, LRESULT *pResult)
{
DisplayProcDataMenuItem(false);
*pResult = 0;
}
void CSignalWindow::DisplayProcDataMenuItem(bool bInput)
{
CProcDataTreeCtrl &tcProcDataRd = bInput ? m_tcProcDataRd : m_tcProcDataWr;
CPoint ptMousePos;
UINT uFlags;
HTREEITEM htItem;
ptMousePos = (CPoint) GetMessagePos(); ScreenToClient(&ptMousePos);
htItem = tcProcDataRd.HitTest( ptMousePos, &uFlags );
if (htItem == NULL && !(TVHT_ONITEM & uFlags))
{
return;
}
HTREEITEM nodSelected = tcProcDataRd.GetSelectedItem();
HTREEITEM parent = tcProcDataRd.GetParentItem(nodSelected);
if (tcProcDataRd.GetParentItem(parent) == NULL)
{
CMenu menu;
CMenu* pPopup;
// the font popup is stored in a resource
if (bInput)
menu.LoadMenu(IDR_MENU_PROCDATA_RD);
else
menu.LoadMenu(IDR_MENU_PROCDATA_WR);
pPopup = menu.GetSubMenu(0);
ClientToScreen(&ptMousePos);
pPopup->TrackPopupMenu( TPM_LEFTALIGN, ptMousePos.x, ptMousePos.y, this );
}
}
我的樹控件從我的自定義類CProcDataTreeCtrl
派生,該類CProcDataTreeCtrl
CTreeCtrl
派生
如果是第一棵樹控制,
調用HitTest
后, ptMousePos
值很好, uFlags
值是TVHT_ONITEMLABEL
如果是第二棵樹控制,
ptMousePos
值很好, uFlags
值是TVHT_BELOW
而HitTest
返回NULL。
我無法低估造成此問題的原因。
感謝您的幫助,
Nipun
ScreenToClient(&ptMousePos);
用。。。來代替:
tcProcDataRd.ScreenToClient(&ptMousePos);
可能第一個樹控件位於對話框的右上角,因此您的代碼有效。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.