您的位置:首页 > 其它

MFC TreeCtrl树形控件中限定右键点击节点弹出菜单

2018-03-28 00:52 447 查看
一、创建3个菜单,ID分别为IDR_MENU2,IDR_MENU3,IDR_MENU4,这些菜单必须要有子菜单项。

二、在树形控件右键-》属性-》事件-》添加右键点击处理。



三、在消息处理函数中添加代码

void CGar3Dlg::OnRclickTreePhase(NMHDR *pNMHDR, LRESULT *pResult)
{
// TODO: 在此添加控件通知处理程序代码
//动态加载菜单
CMenu menu[3];
menu[0].LoadMenu(IDR_MENU2);
menu[1].LoadMenu(IDR_MENU3);
menu[2].LoadMenu(IDR_MENU4);
CPoint pt;
//pt = GetCurrentMessage()->pt; //获取当前鼠标点击消息的坐标点
GetCursorPos(&pt);
m_maintree.ScreenToClient(&pt); //将鼠标的屏幕坐标,转换成树形控件的客户区坐标
UINT uFlags = 0;
HTREEITEM hItem = m_maintree.HitTest(pt, &uFlags); //然后做点击测试
if ((hItem != NULL) && (TVHT_ONITEM & uFlags)) //如果点击的位置是在节点位置上面
{
m_maintree.SelectItem(hItem);
//根据不同类型的节点弹出菜单
CMenu *psubmenu;
int nData = m_maintree.GetItemData(hItem);
m_maintree.ClientToScreen(&pt);
switch (nData)
{
case 0:
psubmenu=menu[0].GetSubMenu(0);
break;
case 1:
psubmenu=menu[1].GetSubMenu(0);
break;
case 2:
psubmenu=menu[2].GetSubMenu(0);
break;
default:
break;
}
psubmenu->TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
}

*pResult = 0;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
相关文章推荐