文章目录
- 一、新建MFC对话框项目
- 二、添加菜单资源
- 三、添加右键响应函数
- 3.1 方法1:WM_CONTEXTMENU响应函数
- 3.2 方法2:WM_RButtonDown响应函数
- 四、添加菜单响应函数
- 五、测试
- 六、升级版
一、新建MFC对话框项目
二、添加菜单资源
添加一个主菜单和3个子菜单。
三个子菜单的ID分别为:
三、添加右键响应函数
3.1 方法1:WM_CONTEXTMENU响应函数
在类视图中为对话框添加消息WM_CONTEXTMENU的响应函数。
在响应函数中添加代码,加载指定的菜单:
void CAddRightButtonMenuDlg::OnContextMenu(CWnd* pWnd, CPoint point)
{// TODO: 在此处添加消息处理程序代码//从资源文件中加载指定ID的菜单CMenu menu;menu.LoadMenu(IDR_MENU1);//获得指定ID菜单的所有子菜单CMenu* pMenu;pMenu = menu.GetSubMenu(0);//EnableMenuItem的意思是允许、禁止或变灰指定的菜单条目。//为每一个子菜单设置状态pMenu->EnableMenuItem(ID_32771, MF_BYCOMMAND | MF_ENABLED);//激活转态pMenu->EnableMenuItem(ID_32772, MF_BYCOMMAND | MF_ENABLED);//激活转态pMenu->EnableMenuItem(ID_32773, MF_BYCOMMAND | MF_DISABLED | MF_GRAYED);//禁用状态,灰色//在鼠标点击处的位置加载出来菜单项pMenu->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y, this);pMenu->Detach();menu.DestroyMenu();}
3.2 方法2:WM_RButtonDown响应函数
在类视图中为对话框添加消息WM_RButtonDown的响应函数。
void CAddRightButtonMenuDlg::OnRButtonDown(UINT nFlags, CPoint point)
{// TODO: 在此添加消息处理程序代码和/或调用默认值CMenu menu;menu.LoadMenu(IDR_MENU1);CMenu* pPopup = menu.GetSubMenu(0);CPoint pointPos;GetCursorPos(&pointPos);pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pointPos.x, pointPos.y, this);CDialogEx::OnRButtonDown(nFlags, pointPos);
}
以上两种方式任选一种即可。
四、添加菜单响应函数
为每一个子菜单添加菜单响应函数:
在生成的代码中添加响应的动作:
void CAddRightButtonMenuDlg::On32771()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello,WaitFoF");
}void CAddRightButtonMenuDlg::On32772()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hi,WaitFoF");
}void CAddRightButtonMenuDlg::On32773()
{// TODO: 在此添加命令处理程序代码MessageBox(L"I want to eat a apple.");
}
五、测试
六、升级版
为子菜单Hello添加3个子菜单:
为子菜单Hi添加一个子菜单:How old are you?
为子菜单Apple添加2个子菜单:big和small
为每一个菜单添加响应函数:
添加响应内容:
void CAddRightButtonMenuDlg::OnHelloWaitfof()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello Waitfof.");
}void CAddRightButtonMenuDlg::OnHelloTom()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello Tom.");
}void CAddRightButtonMenuDlg::OnHelloSalay()
{// TODO: 在此添加命令处理程序代码MessageBox(L"Hello Salay.");
}void CAddRightButtonMenuDlg::OnHiH()
{// TODO: 在此添加命令处理程序代码MessageBox(L"怎么老是你?");
}void CAddRightButtonMenuDlg::OnAppleBig()
{// TODO: 在此添加命令处理程序代码MessageBox(L"大苹果");
}void CAddRightButtonMenuDlg::OnAppleSmall()
{// TODO: 在此添加命令处理程序代码MessageBox(L"小苹果");
}
此时的右键右键响应函数选择的是WM_RBUTTONDOWN。
若屏蔽WM_RBUTTONDOWN,选择WM_CONTEXTMENU:
你会发现效果相同,设置的Apple禁用无效。
代码地址:AddRightButtonMenu.rar