MFC--右键菜单

1.添加一个菜单资源

 

 

 

2.在资源界面中输入菜单的各个指令项的文字内容,并且设置对应的ID号

 

 

 

 3.在对话框的类视图中,选择“属性”-“消息”,重写对消息WM_CONTEXTMENU的响应函数

 

 选择属性

 

4.代码

复制代码
void CyoujiancaidanDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{
    //右击窗口时的消息处理函数

    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CMenu* pMenu;
    pMenu = menu.GetSubMenu(0);// 获取子菜单
    //参数:子菜单索引
    //获取“省市”菜单指针。菜单中可以有多个子菜单,但是只能显示一个子菜单,注意:这个子菜单的文本是不会显示的
    pMenu->EnableMenuItem(ID_32778, MF_BYCOMMAND | MF_ENABLED);//启用、禁用或灰显指定的菜单项
    //参数1:HMENU 菜单的句柄
    //参数2uIDEnableItem:UINT 菜单ID
    //参数3uEnable:UINT 控制 uIDEnableItem 参数的解释,并指示菜单项是启用、禁用还是灰显。 此参数必须是以下值的组合
    //              MF_BYCOMMAND=0x00000000L    指示 uIDEnableItem 提供菜单项的标识符。 如果未指定 MF_BYCOMMAND 或 MF_BYPOSITION 标志, 则MF_BYCOMMAND 标志为默认标志
    //              MF_BYPOSITION=0x00000400L   指示 uIDEnableItem 提供菜单项的从零开始的相对位置
    //              MF_DISABLED=0x00000002L     指示菜单项已禁用,但未灰显,因此无法选择它
    //              MF_ENABLED=0x00000000L      指示菜单项已启用并从灰显状态还原,以便可以选择菜单项
    //              MF_GRAYED =0x00000001L      指示菜单项已禁用并灰显,以便无法选择菜单项
    //返回值:BOOL  返回值指定菜单项的上一状态, (它是 MF_DISABLED、 MF_ENABLED或 MF_GRAYED) 。 如果菜单项不存在,则返回值为 -1
    //启用“北京”菜单
    pMenu->EnableMenuItem(ID_32779, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);
    //禁用“上海”菜单

    pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);//显示菜单
    /*
    在指定位置显示快捷菜单,并跟踪菜单上的项目选择。 快捷菜单可在屏幕上的任意位置显示
    参数1:uFlags:UINT 
                 以下标志之一指定函数水平定位快捷菜单的方式
                 TPM_CENTERALIGN=0x0004L   将快捷菜单水平相对于 x 参数指定的坐标居中
                 TPM_LEFTALIGN=0x0000L     定位快捷菜单,使其左侧与 x 参数指定的坐标对齐
                 TPM_RIGHTALIGN=0x0008L    定位快捷菜单,使其右侧与 x 参数指定的坐标对齐
                 以下标志之一指定函数如何垂直定位快捷菜单
                 TPM_BOTTOMALIGN=0x0020L     定位快捷菜单,使其底部与 y 参数指定的坐标对齐
                 TPM_TOPALIGN=0x0000L        定位快捷菜单,使其顶部与 y 参数指定的坐标对齐
                 TPM_VCENTERALIGN=0x0010L    将快捷菜单垂直相对于 y 参数指定的坐标居中
    参数2:int  快捷菜单的水平位置,以屏幕坐标为单位
    参数3:int  快捷菜单的垂直位置,以屏幕坐标为单位
    参数4:拥有快捷菜单的窗口的句柄。 此窗口从菜单中接收所有消息。 
                在函数返回之前,该窗口不会从菜单中收到 WM_COMMAND 消息。 
                如果在 uFlags 参数中指定TPM_NONOTIFY,函数不会将消息发送到 hWnd 标识的窗口。 
                但是,仍必须在 hWnd 中传递窗口句柄。 它可以是应用程序的任何窗口句柄
    返回值:BOOL  如果在 uFlags 参数中指定TPM_RETURNCMD,则返回值是用户选择的项的菜单项标识符。 
                 如果用户取消菜单而不进行选择,或者发生错误,则返回值为零
    */

    menu.DestroyMenu(); //销毁指定的菜单并释放菜单占用的任何内存


}
复制代码

 

 实例工程下载:

链接:https://pan.baidu.com/s/1_zRoGgoz-1lkM0jZ7c8PsQ
提取码:6666

  

 

 

 

 

 

posted @   天子骄龙  阅读(404)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 震惊!C++程序真的从main开始吗?99%的程序员都答错了
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
· 【硬核科普】Trae如何「偷看」你的代码?零基础破解AI编程运行原理
· 上周热点回顾(3.3-3.9)
历史上的今天:
2022-03-12 halcon-edges_image计算边缘
2022-03-12 halcon-sobel_dir计算边缘
2022-03-12 halcon-sobel_amp计算边缘
2022-03-12 halcon-prewitt_amp计算边缘
2022-03-12 halcon-roberts计算边缘
2019-03-12 matplotlib-2D绘图库-面向对象
点击右上角即可分享
微信分享提示