MFC中右键菜单显示问题

微澜星空 2014-03-04 03:45:23
先上图

定义了菜单以后,右键后,菜单显示不全,不知道怎么回事,用mfc不是很多,我的右键消息的代码是
void CMainFrame::OnRclickList1(NMHDR* pNMHDR, LRESULT* pResult) 
{
CMenu menu;
CPoint pot;
CMenu* pPopup;
VERIFY(menu.LoadMenu(IDR_RBmenu));

//pPopup = menu.GetSubMenu(0);
GetCursorPos(&pot);

menu.TrackPopupMenu(TPM_LEFTALIGN|TPM_LEFTBUTTON|TPM_RIGHTBUTTON, pot.x, pot.y,this);
//pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pot.x, pot.y,this);

*pResult = 0;
}
...全文
341 7 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yileida 2014-10-27
  • 打赏
  • 举报
回复
6楼很对 楼主我也遇到一样的问题,解决方法是必须有二级菜单 比如 添加-删除,这样的话显示效果就和你的一样。 添加 添加 删除 就能正常显示添加删除了!
SlimTracy 2014-10-23
  • 打赏
  • 举报
回复
首先菜单资源必须要有子菜单,就是Menu[“文件”]{MenuA["保存"],MenuB["载入"]}。然后通过LoadMenu加载菜单资源到Menu。Menu。GetSubMenu(0)得到子菜单{MenuA["保存"],MenuB["载入"]},子菜单再TrackPopupMenu显示。
微澜星空 2014-03-04
  • 打赏
  • 举报
回复
好了,用动态创建右键菜单的方法就可以了,上面两位的方法也都可以,不过我不知道我的有什么问题,总是获取不到子菜单
微澜星空 2014-03-04
  • 打赏
  • 举报
回复
引用 2 楼 lfy2217 的回复:
HMENU hroot = LoadMenuA(NULL, "MENU");
		if (hroot)
		{
			POINT pt = msg.ptMouse;
			ClientToScreen(m_hWnd,&pt);
			HMENU hpop = GetSubMenu(hroot,0);
			TrackPopupMenu(hpop,  
				TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON,  
				pt.x,  
				pt.y,  
				0,  
				m_hWnd,  
				NULL);  
			// 用完后要销毁菜单资源  
			DestroyMenu(hroot); 
		}
这是我以前用过的一段 获取坐标的部分可以忽略掉,其他的部分可以参考下
你的和上面的那位版主的应该是一样的,但是我这样写Menu.GetSubMenu(0),那个指针是空的,然后不会弹出菜单,不知道怎么回事
微澜星空 2014-03-04
  • 打赏
  • 举报
回复
引用 1 楼 arpnet99 的回复:
// CMenu Menu,*pMenu; // Menu.LoadMenu(IDR_MENU_POP); // pMenu=Menu.GetSubMenu(0); // POINT pt; // GetCursorPos(&pt); // pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_BOTTOMALIGN|TPM_LEFTALIGN|TPM_RIGHTBUTTON,pt.x,pt.y,this);
这样写的话,会出现错误,能运行,但是调试的时候会出现 好像指针是空的,不知道怎么回事
cngaler 2014-03-04
  • 打赏
  • 举报
回复
HMENU hroot = LoadMenuA(NULL, "MENU");
		if (hroot)
		{
			POINT pt = msg.ptMouse;
			ClientToScreen(m_hWnd,&pt);
			HMENU hpop = GetSubMenu(hroot,0);
			TrackPopupMenu(hpop,  
				TPM_LEFTALIGN | TPM_TOPALIGN | TPM_RIGHTBUTTON,  
				pt.x,  
				pt.y,  
				0,  
				m_hWnd,  
				NULL);  
			// 用完后要销毁菜单资源  
			DestroyMenu(hroot); 
		}
这是我以前用过的一段 获取坐标的部分可以忽略掉,其他的部分可以参考下
这不是鸭头 2014-03-04
  • 打赏
  • 举报
回复
// CMenu Menu,*pMenu; // Menu.LoadMenu(IDR_MENU_POP); // pMenu=Menu.GetSubMenu(0); // POINT pt; // GetCursorPos(&pt); // pMenu->TrackPopupMenu(TPM_LEFTALIGN|TPM_BOTTOMALIGN|TPM_LEFTALIGN|TPM_RIGHTBUTTON,pt.x,pt.y,this);

15,980

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 界面
社区管理员
  • 界面
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧