mfc 给CTreeCtrl添加右键菜单CTreeCtrl

重载CTreeCtrl类CTreeDirCtrl

在CTreeDirCtrl的消息映射里,添加ON_NOTIFY_REFLECT(NM_RCLICK, &CTreeDirCtrl::OnRclickTree1)


在头文件里添加 afx_msg void OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult); 


在实现文件里添加:

void CTreeDirCtrl::OnRclickTree1(NMHDR* pNMHDR, LRESULT* pResult) 
{
// TODO: Add your control notification handler code here
LPPOINT lpoint=new tagPOINT;   
::GetCursorPos(lpoint);                                //获得鼠标


CPoint PointInTree = *lpoint;
ScreenToClient( &PointInTree);


HTREEITEM Item;
UINT nFlag = TVHT_ONITEM; // 当在 Item 上右击时
Item = HitTest( PointInTree, &nFlag );


if(Item)
{
CMenu m_popupmenu;               //定义菜单对象
if(m_popupmenu.CreatePopupMenu())//创建一个弹出式菜单
{
//向菜单m_popupmenu中添加菜单项
m_popupmenu.AppendMenu(MF_STRING,IDC_POPUMENU_ADD,_T("新建动作"));
//显示弹出式菜单,并跟踪用户的菜单项的选择
m_popupmenu.TrackPopupMenu(TPM_LEFTALIGN,lpoint->x,lpoint->y,this);
}
}
*pResult = 0;
}


菜单消息响应:

在CTreeCtrl的继承类的消息映射里,添加:

ON_WM_CONTEXTMENU()
ON_COMMAND_RANGE(IDC_POPUMENU_ADD,IDC_POPUMENU_ADD, OnExamineFile)  第一个IDC_POPUMENU_ADD,是第一个菜单ID,第二个IDC_POPUMENU_ADD,是最后一个菜单ID,此处相同,说明菜单只一个项。

在继承的.h里,写上:

afx_msg void OnExamineFile(UINT nID);

在.cpp里写上;

void CTreeDirCtrl::OnExamineFile( UINT nID )
{

  //需要在别的类处理的话,此处可以添加回调函数
switch(nID)
{
case IDC_POPUMENU_ADD: //具体的ID
{
int a = 0; 
}
break;
}
}

你可能感兴趣的:(mfc,mfc,command,string)