打算在一个窗口上做一右键弹出菜单
右键事件里的源码如下:
CMenu menu;
menu.LoadMenu(IDR_MENU11);
CMenu *pPopup=menu.GetSubMenu(0);
ClientToScreen(&point);
pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);程序执行到标注为红颜色的那行代码就出错
击中断后,光标就停留在afxwin1.inl的985行上
985行代码如下
AFXWIN_INLINE CMenu* CMenu::GetSubMenu(int nPos) const
 { ASSERT(::IsMenu(m_hMenu)); return CMenu::FromHandle(::GetSubMenu(m_hMenu, nPos)); }但是vc6下可以运行通过
各位大侠有遇到过这样的问题吗,望帮忙解决下!Thanks!

解决方案 »

  1.   

    测试了下,在我这没问题void CMFCDlg::OnBnClickedOk()
    {
    POINT pt;
    CMenu menu;
    menu.LoadMenu(IDR_MENU1);
    CMenu *pPopup=menu.GetSubMenu(0);
    GetCursorPos(&pt);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, pt.x, pt.y,this); //OnOK();
    }
      

  2.   

    LoadMenu失败了吧
    检查一下IDR_MENU11这个资源
      

  3.   

    loadMenu失败,菜单那个Id检查过了,也没有错
    AFXWIN_INLINE CMenu* CMenu::GetSubMenu(int nPos) const
     { ASSERT(::IsMenu(m_hMenu)); return CMenu::FromHandle(::GetSubMenu(m_hMenu, nPos)); }
    调试就指向了afxwin1.inl红色的部分
      

  4.   

    LoadMenu()失败了,你GetLastError()看看函数的返回值不就很清楚为什么LoadMenu调用不成功了吗?
      

  5.   

    我也感觉是loadMenu()失败了,可怎么会失败呢,我菜单Id没写错啊
    自动窗口显示的信息为:m_hMenu 值0x00000000{unused=???} nPos 值为0
    另外GetLastError()怎么用啊
    看你以前回复的用法
    DWORD dwRet = GetLastError();
    CString strText(_T(""));
    strText.Format(_T("%d"), dwRet);
    AfxMessageBox(strText);
    我把这段代码直接放在以下标注为红颜色的代码后,也执行不到啊,
    程序就执行到红颜色这行就报错了,他以后的代码都执行不了了
    CMenu menu;
    menu.LoadMenu(IDR_MENU11);
    CMenu *pPopup=menu.GetSubMenu(0);
    ClientToScreen(&point);
    pPopup->TrackPopupMenu(TPM_LEFTALIGN | TPM_RIGHTBUTTON, point.x, point.y,this);
      

  6.   

    ASSERT(::IsMenu(m_hMenu)); // 断言错误,IsMenu(m_hMenu)为假。
    // 也就是说程序认为m_hMenu对应的不是菜单。
    // 此时检查下m_hMenu的值。
    // 明显LoadMenu()失败,菜单未能建立
    // 可以尝试在VS2008下重新建立菜单资源。
      

  7.   

    怎么会loadMenu失败呢,有点纳闷