mfc在窗口中添加右键菜单

时间:2021-09-10 17:05:14

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");
}