簡體   English   中英

CTreeCtrl HitTest返回NULL MFC

[英]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_BELOWHitTest返回NULL。

我無法低估造成此問題的原因。

感謝您的幫助,

Nipun

ScreenToClient(&ptMousePos);

用。。。來代替:

tcProcDataRd.ScreenToClient(&ptMousePos);

可能第一個樹控件位於對話框的右上角,因此您的代碼有效。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM