mfc在窗口中添加右键菜单,大致分为以下三步
一。创建菜单
创建基于对话框的MFC应用程序PopMenu,插入-》资源-》菜单-》创建父菜单的ID为IDR_POPMENU,创建子菜单的ID分别为ID_MENUITEM1,ID_MENUITEM2
二、定义函数并且添加消息映射
声明函数:
afx_msg void OnMenuitem1();//ID_MENUITEM1消息函数
afx_msg void OnMenuitem2();//ID_MENUITEM2消息函数
afx_msg void OnContextMenu(CWnd* pWnd, CPoint point);//右键菜单响应映射函数
添加消息映射
BEGIN_MESSAGE_MAP(CPopManuDlg, CDialog) //{{AFX_MSG_MAP(CPopManuDlg) ON_WM_SYSCOMMAND() ON_WM_PAINT() ON_WM_QUERYDRAGICON() ON_WM_CONTEXTMENU()//右键菜单响应消息映射 ON_COMMAND(ID_MENUITEM1, OnMenuitem1)//ID_MENUITEM1消息映射 ON_COMMAND(ID_MENUITEM2, OnMenuitem2)//ID_MENUITEM2消息映射 //}}AFX_MSG_MAP END_MESSAGE_MAP()
三、右键时加载菜单并且添加消息响应函数
添加菜单函数
void CPopManuDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
CMenu m_popmenu;
m_popmenu.LoadMenu(IDR_POPMENU);
CMenu* m_submenu = m_popmenu.GetSubMenu(0);
m_submenu->TrackPopupMenu(TPM_LEFTBUTTON |TPM_LEFTALIGN ,point.x,point.y,this);//point即为当前鼠标所在的位置
m_popmenu.DestroyMenu();
}
void CPopManuDlg::OnMenuitem1()
{
AfxMessageBox("点击了菜单1");
}
void CPopManuDlg::OnMenuitem2()
{
AfxMessageBox("点击了菜单2");
}