0
votes

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

1

1 Answers

1
votes
ScreenToClient(&ptMousePos);

Replace with:

tcProcDataRd.ScreenToClient(&ptMousePos);

Probably first tree control is in the right-top position in the dialog, therefore your code works.