我已经看了CSDN里面的所有相关文章,很多朋友提出了一些方法,但好像都不行。
做出来的效果就如同VC左边的workspace那样,右键单击一个不同的根,可以弹出不同的菜单出来。右键单击根里面的一些子选项,又可以弹出不同的菜单来。我自己觉得好像只能用OnContextMenu函数实现,其他都不行。但具体操作望高手解答。
做出来的效果就如同VC左边的workspace那样,右键单击一个不同的根,可以弹出不同的菜单出来。右键单击根里面的一些子选项,又可以弹出不同的菜单来。我自己觉得好像只能用OnContextMenu函数实现,其他都不行。但具体操作望高手解答。
{
CMenu menu,* pSubMenu; //¶¨ÒåÏÂÃæÒªÓõ½µÄcmenu¶ÔÏó
menu.LoadMenu(IDR_POP_TREE_CIRCUIT); //×°ÔØ×Ô¶¨ÒåµÄÓÒ¼ü²Ëµ¥
pSubMenu = menu.GetSubMenu(0); //»ñÈ¡µÚÒ»¸öµ¯³ö²Ëµ¥£¬ËùÒÔµÚÒ»¸ö²Ëµ¥±ØÐëÓÐ×Ӳ˵¥
CPoint oPoint; //¶¨ÒåÒ»¸öÓÃÓÚÈ·¶¨¹â±êλÖõÄλÖÃ
GetCursorPos(&oPoint); //»ñÈ¡µ±Ç°¹â±êµÄλÖã¬ÒÔ±ãʹµÃ²Ëµ¥¿ÉÒÔ¸úËæ¹â±ê
pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);//ÔÚÖ¸¶¨Î»ÖÃÏÔʾµ¯³ö²Ëµ¥
}
{
CMenu menu,* pSubMenu; //定义下面要用到的CMenu对象
menu.LoadMenu(IDR_POP_TREE_CIRCUIT); //装载自定义的右键菜单
pSubMenu = menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint oPoint; //定义一个用于确定光标位置的位置
GetCursorPos(&oPoint); //获取当前光标的为止,以便使得菜单一刻跟随光标
pSubMenu->TrackPopupMenu (TPM_LEFTALIGN, oPoint.x, oPoint.y, this);//在指定位置显示弹出菜单
}
也就是OnRClick里,你写的什么?
m_tree.SetItemData(hCountry,10); //这两句是在OnCreate里面创建一个树根。
void CMyTreeView::OnRclick(NMHDR* pNMHDR, LRESULT* pResult)
{
// TODO: Add your control notification handler code here
*pResult = 0; CPoint ptCursor;
::GetCursorPos(&ptCursor);
CPoint ptTmp = ptCursor;
m_tree.ScreenToClient(&ptCursor);
HTREEITEM hCurSelItem ;
m_tree.SelectItem(hCurSelItem);
CMenu menuPopup;
menuPopup.LoadMenu(IDR_TREEMENU);
CMenu* pSubMenu = menuPopup.GetSubMenu(0);
if(m_tree.GetItemData(hCurSelItem ==10)
{
pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,ptTmp.x,ptTmp.y,this);
}}
OnRclick写在派生类中
HTREEITEM hCurSelItem ;
m_tree.SelectItem(hCurSelItem);
*********/有问题,应使用TreeView_HitTest获得当前的hTreeItem
void CXXXDlg::OnNMRclickTree(NMHDR *pNMHDR, LRESULT *pResult)
{
NM_TREEVIEW* pNMTreeView = (NM_TREEVIEW*)pNMHDR; CPoint pt;
GetCursorPos(&pt); UINT flags;
m_treectrl.ScreenToClient(&pt); HTREEITEM hItemOne = m_treectrl.HitTest(pt,&flags);
if (hItemOne && m_treectrl.GetParentItem(hItemOne) == m_treectrl.GetRootItem()) AfxMessageBox(L"right click "); *pResult = 0;
}
OnRclick写在派生类中