MFC 添加右键菜单选项功能

MFC 中提供三种方法来响应添加右键菜单功能,即三种消息响应函数WM_RBUTTONDOWNRBUTTONUP WM_CONTEXMENU

在这里我WM_RBUTTONDOWN实现这个功能。

首先必须在资源编辑窗口新建菜单比如命名为IDM_MENU1


MFC 添加右键菜单选项功能_第1张图片


然后在子菜单响应消息如下 作为测试

void CRightMenuDlg::OnMenu1()
{
    // TODO: Add your command handler code here
    MessageBox("menu1 test");
}

void CRightMenuDlg::OnMenu2()
{
    // TODO: Add your command handler code here
    MessageBox("menu2 test2");



打开属性编辑栏,在对话框添加picture控件,这样可以在这个控件区域内响应鼠标右键菜单消息,我把这个控件取名为IDC_STATIC_TEST

如何所示



工程右边打开class view,

MFC 添加右键菜单选项功能_第2张图片

选中类如果是对话框的话选中**dlg类然后右键选择Add windows message handle 如图所示

MFC 添加右键菜单选项功能_第3张图片

找到WM_RBUTTONDWON 选择Add  Handle 然后 选择Edit Existing 就直接进入编辑


接下来编辑代码如下:

void CRightMenuDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
    // TODO: Add your message handler code here and/or call default
    CRect rect1;
    GetDlgItem(IDC_STATIC_TEST)->GetWindowRect(&rect1);  //指定控件区域
    this->ScreenToClient(&rect1);  //转换为在控件相对坐标
    if(PtInRect(rect1,CPoint(point)))  //判断鼠标是否在控件区域内
    {
        CMenu menu;
        menu.LoadMenu(IDR_MENU1);  //加载菜单项
        CMenu *pmenu;
        pmenu=menu.GetSubMenu(0); //获取第一个菜单项
        CPoint point1;
        GetCursorPos(&point1);
        pmenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this); //弹出方式和位置
        
    }
    

    CDialog::OnRButtonDown(nFlags, point);
}

然后运行最终效果如下:

在控件内右键鼠标,弹出菜单选中第一个结果如下

MFC 添加右键菜单选项功能_第4张图片


你可能感兴趣的:(MFC编程)