MFC对话框弹出上下文菜单并响应命令
主菜单在App里创建,主菜单响应函数不能在普通类中响应。
对话框中的右键菜单,如果把对话框指针传进去。
则右键菜单命令可以在对话框类中实现。
1.新建sdi程序。
添加对话框资源IDD_DIALOG1
关联类CDlg
添加菜单资源IDR_MENU1
2.主菜单的命令无法在对话框类中响应。
虽然可以添加响应函数,但是无法响应。
谁知道请告诉我,谢谢。
因为主菜单在App中创建,如图:
如果有需求,可以用通吃的方法,向对话框发自定义消息。
3.对话框中的右键菜单(上下文菜单)的命令响应函数,
可以写在对话框类中,条件是创建菜单的时候把对话框类指针传进去。
4.以对话框类为父窗口创建的菜单,命令响应函数可以写在对话框类中,
也可以写在其他如MainFrame,App,View类中。
新手需要源码,留下邮箱索取。
url:http://greatverve.cnblogs.com/archive/2012/11/21/mfc-dlg-menu-cmd.html
void CDlg::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)
{
// TODO: 在此处添加消息处理程序代码
CMenu menu; //定义下面要用到的cmenu对象
menu.LoadMenu(MAKEINTRESOURCE(IDR_MENU1));//装载自定义的右键菜单
CMenu *pContextMenu=menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint point1;//定义一个用于确定光标位置的位置
GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,
this); //把对话框类指针传进去
}
void CDlg::OnDlg()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox("menu dlg");
Invalidate();// 这是我最终的目标,右击菜单执行完后刷新。
}
{
// TODO: 在此处添加消息处理程序代码
CMenu menu; //定义下面要用到的cmenu对象
menu.LoadMenu(MAKEINTRESOURCE(IDR_MENU1));//装载自定义的右键菜单
CMenu *pContextMenu=menu.GetSubMenu(0); //获取第一个弹出菜单,所以第一个菜单必须有子菜单
CPoint point1;//定义一个用于确定光标位置的位置
GetCursorPos(&point1);//获取当前光标的位置,以便使得菜单可以跟随光标
pContextMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_RIGHTBUTTON,point1.x,point1.y,
this); //把对话框类指针传进去
}
void CDlg::OnDlg()
{
// TODO: 在此添加命令处理程序代码
AfxMessageBox("menu dlg");
Invalidate();// 这是我最终的目标,右击菜单执行完后刷新。
}
我这个博客废弃不用了,今天想寻找外链的时候,突然想到这个博客权重很高。
有需要免费外链的,留言即可,我准备把这个博客变成免费的友情链接站点。