感谢过来人的分享!我也是检索了许多网络信息,然后实现了自己想做的功能!然后想记录和分享一下自己的使用经验。
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();