1、使用ClassWizard创建树节点右键消息,实现右键消息响应函数如下:
void CTreeDlg::OnRButtonClickTree(NMHDR* pNMHDR, LRESULT* pResult)
{//获取屏幕坐标
CPoint pt;
GetCursorPos(&pt);
//将屏幕坐标转化为客户区坐标
UINT uFlags;
m_Mytree.ScreenToClient(&pt);
//获取鼠标点中位置的item
HTREEITEM hItem = m_Mytree.HitTest(pt,&uFlags);
if (NULL != hItem)
{
//设置当前节点为选中节点
m_Mytree.SelectItem(hItem);
}
else
{
MessageBox("获取节点句柄失败!");
return;
}
//注:以上步骤获取右击时树的节点句柄,不能直接使用: m_Mytree.GetSelectedItem();
//创建菜单
CMenu popmenu;
popmenu.CreatePopupMenu();
//添加菜单项目
//当前头文件处定义:#define IDM_MYTREE_MENU_1 101 //菜单ID
//显示菜单
CPoint ptMenu;
GetCursorPos(&ptMenu);
popmenu.TrackPopupMenu(TPM_RIGHTBUTTON, ptMenu.x, ptMenu.y, this);
*pResult = 0;
}
2、*.cpp消息关联中关联菜单消息ID及响应菜单响应函数: ON_COMMAND(IDM_MYTREE_MENU_1, MyTreeMenu);
在*.h中定义菜单响应函数:afx_msg void MyTreeMenu();;
*.cpp中实现消息响应函数如下:
void CTreeDlg::MyTreeMenu()
MessageBox("我的右键菜单测试");
}