如何实现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。

相关文章
相关标签/搜索