1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > MFC实战篇——添加鼠标右键响应菜单

MFC实战篇——添加鼠标右键响应菜单

时间:2022-03-26 08:16:09

相关推荐

MFC实战篇——添加鼠标右键响应菜单

文章目录

一、新建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

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。