MFC 如何生成右键菜单

创建一个基于对话框的应用程序è对话框改名为”创建弹出式菜单”

ResourceView选项卡右击Insert插入一个菜单资源,编辑此菜单资源结果如下:

MFC 如何生成右键菜单_第1张图片

在对话框的头文件(项目名)Dlg.h中添加声明一个CMenu对象m_Menu

在OnInitDialog方法中调用LoadMenu方法,代码如下:

M_Menu.LoadMenu(IDR_MENU1);    //加载菜单资源

选择ClassView选项卡è右击 C 菜单项 Dlg节点èAdd Windows Handlerè选择WM_RBUTTONUP,此事件在鼠标右键抬起时触发,在该函数中处理右键抬起的事件代码如下: 

void CNonestaticcreatemenuDlg::OnRButtonUp(UINT nFlags, CPoint point) 
{	CMenu *pMenu=m_Menu.GetSubMenu(0);//获得菜单句柄
	CRect rect;							//声明一个CRect对象
	ClientToScreen(&point);					//将客户坐标转换为屏幕坐标
	rect.top=point.x;		//将鼠标当前横坐标作为弹出菜单的左上角坐标
	rect.left=point.y;		//将鼠标当前纵坐标作为弹出菜单的左上角坐标
pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_VERTICAL,rect.top,rect.left,this,&rect);//显示弹出菜单
CDialog::OnRButtonUp(nFlags, point);//调用基类方法
}

在类向导中为每一个菜单项的每一个”菜单项”如”添加文件”处理单击事件.代码如下:

void CNonestaticcreatemenuDlg::OnAdd() 
{	MessageBox(" '添加文件'项被按下");
}
void CNonestaticcreatemenuDlg::OnDel() 
{	MessageBox(" '删除文件'项被按下");
}
void CNonestaticcreatemenuDlg::OnEdit() 
{	MessageBox(" '编辑文件'项被按下");
}
void CNonestaticcreatemenuDlg::Onsearch() 
{	MessageBox(" '查找文件'项被按下");
}
void CNonestaticcreatemenuDlg::OnExit() 
{	CDialog::OnCancel();
}

运行结果如下:

MFC 如何生成右键菜单_第2张图片


MFC 如何生成右键菜单_第3张图片


你可能感兴趣的:(mfc,右键菜单)