重载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;
}
}