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
服务器托管,北京服务器托管,服务器租用 http://www.fwqtg.net
机房租用,北京机房租用,IDC机房托管, http://www.e1idc.net