您的位置:首页 > 其它

MFC 添加右键菜单选项功能

2013-08-22 16:14 891 查看
MFC 中提供三种方法来响应添加右键菜单功能,即三种消息响应函数WM_RBUTTONDOWN或RBUTTONUP WM_CONTEXMENU

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

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



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

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,



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



找到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