我做了个类继承了CDialog,调用函数dlg.DoModal();进行显示时是正确的,但在DEBUG模式下点击鼠标右键的时候就会报一个断言失败。
ASSERT(m_hMenu != NULL);可能是我没有做弹出菜单,我现在想禁用这个CDialog的弹出菜单,怎么解决。
在release下没有问题

解决方案 »

  1.   

    你调试一下WM_RBUTTONUP消息的响应过程,看看哪行代码引起这个错误。
      

  2.   

      你是不是把InitDialog里面自动生成的东西删除了?
      不是,再给点关键信息.你右键单击响应的函数.
      

  3.   

    查看一下WM_RBUTTONUP、WM_CONTEXTMENU这两个消息处理函数你在Debug模式下,当出现断言错误时,点击重试,就可以看到出现断言代码的位置
    如果是在MFC的源码中的断言,你可以在通过查看Call Stack查看是从程序什么地方调用的。
      

  4.   

    报错的地方是afxwin1.inl:
    _AFXWIN_INLINE CMenu* CMenu::GetSubMenu(int nPos) const
    { ASSERT(::IsMenu(m_hMenu)); return CMenu::FromHandle(::GetSubMenu(m_hMenu, nPos)); }
    是不是因为我这个话面没有做子menu啊?是不是要加以个右键事件啊?
      

  5.   

    void CBWMP810NDlg::OnContextMenu(CWnd* /*pWnd*/, CPoint point)
    {
        CMenu   cMenu;#ifdef _DEBUG
        cMenu.GetSubMenu(0)
            ->TrackPopupMenu(
                TPM_LEFTALIGN | TPM_RIGHTBUTTON,
                point.x, point.y, this);
    #endif
    }
    我的程序主要就是这里出了问题,这个代码是别人写的我也不太清除,能不能给我解释一下啊,我发现把#ifdef _bebug 到#endif注释掉后程序就没问题了。
      

  6.   

    这是快捷菜单的响应函数,如果你把#ifdef_debuge和#endif去掉后可以 ,说明程序在开始没有define debuge,你在头文件的头部加上#define _DEBUGE 就ok了中间的代码是加载菜单的,可以到msdn去查