MFC 添加右键菜单选项功能
2013-08-22 16:14
891 查看
MFC 中提供三种方法来响应添加右键菜单功能,即三种消息响应函数WM_RBUTTONDOWN或RBUTTONUP WM_CONTEXMENU
在这里我用WM_RBUTTONDOWN实现这个功能。
首先必须在资源编辑窗口新建菜单比如命名为IDM_MENU1
然后在子菜单响应消息如下 作为测试
void CRightMenuDlg::OnMenu1()
{
// TODO: Add your command handler code here
MessageBox("menu1 test");
}
void CRightMenuDlg::OnMenu2()
{
// TODO: Add your command handler code here
MessageBox("menu2 test2");
打开属性编辑栏,在对话框添加picture控件,这样可以在这个控件区域内响应鼠标右键菜单消息,我把这个控件取名为IDC_STATIC_TEST
如何所示
工程右边打开class view,
选中类如果是对话框的话选中**dlg类然后右键选择Add windows message handle 如图所示
找到WM_RBUTTONDWON 选择Add Handle 然后 选择Edit Existing 就直接进入编辑
接下来编辑代码如下:
void CRightMenuDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect1;
GetDlgItem(IDC_STATIC_TEST)->GetWindowRect(&rect1); //指定控件区域
this->ScreenToClient(&rect1); //转换为在控件相对坐标
if(PtInRect(rect1,CPoint(point))) //判断鼠标是否在控件区域内
{
CMenu menu;
menu.LoadMenu(IDR_MENU1); //加载菜单项
CMenu *pmenu;
pmenu=menu.GetSubMenu(0); //获取第一个菜单项
CPoint point1;
GetCursorPos(&point1);
pmenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this); //弹出方式和位置
}
CDialog::OnRButtonDown(nFlags, point);
}
然后运行最终效果如下:
在控件内右键鼠标,弹出菜单选中第一个结果如下
在这里我用WM_RBUTTONDOWN实现这个功能。
首先必须在资源编辑窗口新建菜单比如命名为IDM_MENU1
然后在子菜单响应消息如下 作为测试
void CRightMenuDlg::OnMenu1()
{
// TODO: Add your command handler code here
MessageBox("menu1 test");
}
void CRightMenuDlg::OnMenu2()
{
// TODO: Add your command handler code here
MessageBox("menu2 test2");
打开属性编辑栏,在对话框添加picture控件,这样可以在这个控件区域内响应鼠标右键菜单消息,我把这个控件取名为IDC_STATIC_TEST
如何所示
工程右边打开class view,
选中类如果是对话框的话选中**dlg类然后右键选择Add windows message handle 如图所示
找到WM_RBUTTONDWON 选择Add Handle 然后 选择Edit Existing 就直接进入编辑
接下来编辑代码如下:
void CRightMenuDlg::OnRButtonDown(UINT nFlags, CPoint point)
{
// TODO: Add your message handler code here and/or call default
CRect rect1;
GetDlgItem(IDC_STATIC_TEST)->GetWindowRect(&rect1); //指定控件区域
this->ScreenToClient(&rect1); //转换为在控件相对坐标
if(PtInRect(rect1,CPoint(point))) //判断鼠标是否在控件区域内
{
CMenu menu;
menu.LoadMenu(IDR_MENU1); //加载菜单项
CMenu *pmenu;
pmenu=menu.GetSubMenu(0); //获取第一个菜单项
CPoint point1;
GetCursorPos(&point1);
pmenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,this); //弹出方式和位置
}
CDialog::OnRButtonDown(nFlags, point);
}
然后运行最终效果如下:
在控件内右键鼠标,弹出菜单选中第一个结果如下
相关文章推荐
- MFC基于对话框最小化到托盘,并鼠标右键添加菜单以及对应菜单功能
- silverlight:向TextBox添加右键菜单,菜单包括复制、粘贴、剪切、选择全部等四项功能!
- ubuntu14.04右键菜单添加sublime打开选项
- MFC右键菜单的添加
- mfc在窗口中添加右键菜单
- MFC中动态创建N级菜单以及响应事件——续——动态添加菜单/菜单项、子菜单、右键菜单
- 如何在IE右键菜单中中添加自已的选项
- 为右键菜单添加从cmd打开选项
- 为jQuery-easyui的tab组件添加右键菜单功能
- 表格添加右键菜单功能
- 通过注册表添加右键菜单选项
- VC 给列表框添加【右键按键菜单】功能
- MFC中的CMenu---如何动态添加菜单/菜单项、子菜单、右键菜单
- java实现树的添加和取父节点,子节点;聚合树,实现选项菜单功能
- 在Windows注册表中添加右键菜单删除CVS Folds的选项
- 右键菜单添加“Edit With Sublime Text"选项
- 添加功能到系统右键菜单
- 为jQuery-easyui的tab组件添加右键菜单功能的简单实例
- MFC总结(5)---ListCtrl添加右键菜单
- MFC添加右键菜单