天天看点

mfc在窗口中添加右键菜单

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();

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