MFC tree control 问题

来源:百度知道 编辑:UC知道 时间:2024/06/17 12:49:29
我想右键点击能选择节点。
我在右键点击消息中实现下面的代码。为什么不行呢~请指教
CPoint MyPoint;
m_tree.ScreenToClient(&MyPoint);
UINT uFlags;
HTREEITEM hItem = m_tree.HitTest(MyPoint, &uFlags);
if ((hItem != NULL) && (TVHT_ONITEM & uFlags))
m_tree.SelectItem(hItem);

::GetCursorPos( &MyPoint); ;//获得屏幕坐标
放在第二行在转换之前

你需要由CTreeCtrl派生一个新类,比如CTreeCtrlEx
然后响应CTreeCtrlEx的NM_RCLICK消息,在其中添加如下代码

void CTreeCtrlEx::OnRclick(NMHDR* pNMHDR, LRESULT* pResult) 
{
    CPoint pt; 
    GetCursorPos(&pt);
    ScreenToClient(&pt); 
    UINT uFlags; 
    HTREEITEM hItem = HitTest(pt, &uFlags); 
    if ((hItem != NULL) && (TVHT_ONITEM & uFlags)) 
        SelectItem(hItem);  
    
    *pResult = 0;
}

最后别忘了将m_tree的类型改为CTreeCtrlEx