首页 > 编程知识 正文

mfc 右键菜单,mfc菜单快捷键

时间:2023-05-04 13:52:34 阅读:281975 作者:2569

文章目录 一、新建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

版权声明:该文观点仅代表作者本人。处理文章:请发送邮件至 三1五14八八95#扣扣.com 举报,一经查实,本站将立刻删除。