VS2010 MFC右键添加菜单

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

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

    VS2010 MFC右键添加菜单_第1张图片

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没有子菜单;

        ……

}

VS2010 MFC右键添加菜单_第2张图片


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();

你可能感兴趣的:(MFC)