关于弹出菜单问题

angelyeti 2006-09-19 07:39:20
点击ToolBar一个按钮出现一个菜单,按照如下写的话,会出现“程序出现错误,需要关闭”的错误。
void CMainFrame::OnColor()
{
CMenu *pMenu = AfxGetMainWnd()->GetMenu();
CRect rect;
GetClientRect(&rect);
ClientToScreen(&rect);
CMenu *pSubMenu = pMenu->GetSubMenu(4);
pSubMenu->TrackPopupMenu(TPM_CENTERALIGN | TPM_LEFTBUTTON, rect.left+200, rect.top, CWnd::FromHandle(m_hWnd));
}
但如果同样的代码,在View类中的话,完全不会出现问题。请问如果在Frame类中处理,这个问题该怎么解决呢?
...全文
196 6 打赏 收藏 转发到动态 举报
写回复
用AI写文章
6 条回复
切换为时间正序
请发表友善的回复…
发表回复
angelyeti 2006-09-21
  • 打赏
  • 举报
回复
在这个事件响应函数中pSubMenu不为空,但是我重画了菜单,在那里面出现了空值:)
多谢楼上几位,GetCursorPos确实是个好方法。thanks all.
angelyeti 2006-09-20
  • 打赏
  • 举报
回复
pSubMenu不为空,
这是放在Frame中的,如果放在View中则一点问题也没有。
折腾_苏州 2006-09-20
  • 打赏
  • 举报
回复
CMenu *pSubMenu = pMenu->GetSubMenu(4);
检查下pSubMenu是否NULL?

CMenu *pMenu = AfxGetMainWnd()->GetMenu();返回的是主菜单指针。
看看两次获取的指针值是否一样?
angelyeti 2006-09-20
  • 打赏
  • 举报
回复
还是不行,但如果我把 pSubMenu = pMenu->GetSubMenu(4);去掉。换成pSubMenu = pMenu;则不会出错
palmax 2006-09-19
  • 打赏
  • 举报
回复
楼主为什么不用GetCursorPos来获得鼠标的位置然后弹出菜单呢?
CUG122032 2006-09-19
  • 打赏
  • 举报
回复
CRect rect;
GetClientRect(&rect);
ClientToScreen(&rect);

这的问题吧.

Frame的矩形会大些

15,976

社区成员

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

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