I am working on an MDI application using VS2008. I have created 2 tree conrols on a dialog box.
When I right click, 1st tree control displays a menu but 2nd tree control doesn't.
Here is my code:
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 );
}
}
My tree control is derived from my custom class CProcDataTreeCtrl
which is further derived from CTreeCtrl
In case of 1st tree control,ptMousePos
values are fine, uFlags
value is TVHT_ONITEMLABEL
after calling HitTest
In case of 2nd tree control,ptMousePos
values are fine, uFlags
value is TVHT_BELOW
and HitTest
returning NULL.
I am unable to understabd what is causing this problem.
thanks for ur help,
Nipun