MFC:在CView(或CScrollView等)界面上动态添加右键菜单

菜单ID宏定义如下:

#define WM_RMENU_HUMAN		WM_USER + 0x010
#define WM_RMENU_PLANT		WM_USER + 0x011
#define WM_RMENU_CAT		WM_USER + 0x012
#define WM_RMENU_DOG		WM_USER + 0x013
#define WM_RMENU_ELEPHANT	WM_USER + 0x014
添加右键菜单响应消息:

    afx_msg void OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/);

添加点击菜单响应消息函数:

    virtual BOOL OnCommand(WPARAM wParam, LPARAM lParam);

主要代码如下所示:

void CMenuTest2View::OnContextMenu(CWnd* /*pWnd*/, CPoint /*point*/)
{
	CMenu subMenu;
	//subMenu.LoadMenu(IDR_MAINFRAME);
	subMenu.CreatePopupMenu();
	subMenu.AppendMenu(MF_STRING, WM_RMENU_CAT, _T("猫"));
	subMenu.AppendMenu(MF_STRING, WM_RMENU_DOG, _T("狗"));
	subMenu.AppendMenu(MF_STRING, WM_RMENU_ELEPHANT, _T("大象"));

	CMenu mainMenu;
	mainMenu.CreatePopupMenu();					//动态创建弹出式菜单对象
	mainMenu.AppendMenu(MF_STRING, WM_RMENU_HUMAN, _T("人类"));
	mainMenu.AppendMenu(MF_SEPARATOR);			//添加分割线

	mainMenu.AppendMenu(MF_STRING, WM_RMENU_PLANT, _T("植物"));
	mainMenu.AppendMenu(MF_SEPARATOR);			//添加分割线
	mainMenu.InsertMenu(mainMenu.GetMenuItemCount(), MF_BYPOSITION | MF_POPUP | MF_STRING, (UINT)subMenu.m_hMenu, _T("动物")); //添加子菜单

	CPoint pt;
	GetCursorPos(&pt);
	mainMenu.TrackPopupMenu(TPM_RIGHTBUTTON, pt.x, pt.y, this);
	mainMenu.DestroyMenu();
	subMenu.DestroyMenu();
}

BOOL CMenuTest2View::OnCommand(WPARAM wParam, LPARAM lParam)
{
	switch (LOWORD(wParam))
	{
	case WM_RMENU_HUMAN:
		MessageBox(_T("人类"));
		break;
	case WM_RMENU_PLANT:
		MessageBox(_T("植物"));
		break;
	case WM_RMENU_CAT:
		MessageBox(_T("猫"));
		break;
	case WM_RMENU_DOG:
		MessageBox(_T("狗"));
		break;
	case WM_RMENU_ELEPHANT:
		MessageBox(_T("大象"));
		break;
	default:
		break;
	}
	return CScrollView::OnCommand(wParam, lParam);
}
运行界面如下:


  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

宏笋

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值