VS2010 MFC右键添加菜单

感谢过来人的分享!我也是检索了许多网络信息,然后实现了自己想做的功能!然后想记录和分享一下自己的使用经验。

1、在VS2010的资源对话框中添加Menu资源;

    

2、在对话框资源中,给MFC控件添加事件处理程序,如我使用的右键单击事件,NM_RCLICK消息类型;


3、具体的逻辑代码

	CMenu menu;
	menu.LoadMenu(IDR_MENU1);
	CPoint point;
	GetCursorPos(&point);
	ASSERT(menu.GetSafeHmenu());
	CMenu* pSubMenu = menu.GetSubMenu(0);
	ASSERT(pSubMenu);
	pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,this);
	menu.Detach();

4、其中遇到的问题


BOOL CMenu::TrackPopupMenu(UINT nFlags, int x, int y,
CWnd* pWnd, LPCRECT lpRect)
{

ASSERT(m_hMenu != NULL);//宏断言被触发,意味着m_hMenu为空,说明pSubMenu没有子菜单;

        ……

}



5、问题复现

在创建的菜单中,GetSubMenu(1),显然第二个菜单没有子菜单项;

	CMenu menu;
	menu.LoadMenu(IDR_MENU1);
	CPoint point;
	GetCursorPos(&point);
	ASSERT(menu.GetSafeHmenu());
	CMenu* pSubMenu = menu.GetSubMenu(1);
	ASSERT(pSubMenu);
	pSubMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON,point.x,point.y,this);
	menu.Detach();

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值