如何實現CTreeCtrl中,右鍵點擊節點的時候,該節點被選中。而且加載右擊菜單

  void CMytreeDlg::OnNMRclickTree1(NMHDR *pNMHDR, LRESULT *pResult)函數

{   this

    CPoint   point(GetMessagePos()); spa

    unsigned   int   nFlags   =   0; 調試

 

    m_tree.ScreenToClient(&point); orm

    HTREEITEM   hItem   =   m_tree.HitTest(point,&nFlags); ci

    if  ((nFlags& TVHT_ONITEM) &&(hItem!=NULL))資源

    { it

       m_tree.SetFocus(); io

       m_tree.SelectItem(   hItem   ); ast

       CMenu MyMenu;

       MyMenu.LoadMenu(IDR_MENU1);//加載菜單資源

       CMenu* popup=MyMenu.GetSubMenu(0);

       GetCursorPos(&point);//獲取當前光標的位置,以便使得菜單能夠跟隨光標這裏也能夠用m_tree.ClientToScreen(&point);

       popup->TrackPopupMenu(TPM_LEFTBUTTON|TPM_LEFTALIGN,point.x,point.y,this);

    }

    // TODO: 在此添加控件通知處理程序代碼

    *pResult = 0;

}

    須要注意的是客戶與屏幕座標的轉換問題,注意 GetCursorPos返回屏幕座標,HitTest使用的是客戶座標。這裏的GetCursorPos也可換成GetmessagePos 除了用法稍有不一樣我沒發現實際調試後有什麼不一樣之處MSDN裏是這樣描述其不一樣之處的:要獲得光標的當前位置而不是上一個消息發生時的位置,調用函數GetCursorPos。

相關文章
相關標籤/搜索