弱弱的问一下 我在标准MFC程序里 的CMainFrame 的OnCreate 函数后面 加上
 CMenu menu;
menu.CreatePopupMenu();
GetMenu()->AppendMenu(MF_POPUP,(UINT)menu.m_hMenu,("X"));
编译就出错了
有人知道什么原因吗? 
错误提示:
 (mfc100d.dll)处有未经处理的异常:0xC0000005:读取位置0x00000004时发生访问冲突

解决方案 »

  1.   

    menu不能是局部变量,应该弄成CMainFrame的成员变量(可以是指针,到时候再new;也可以是一般对象)。
    否则函数结束后menu就没了。
      

  2.   

    CMenu menu;   
    menu.CreatePopupMenu();   
    GetMenu()->AppendMenuW(MF_POPUP,(UINT) menu.m_hMenu, _T("VC++"));   
    menu.AppendMenuW(MF_STRING, 111, _T("Hello"));   
    menu.AppendMenuW(MF_STRING, 112, _T("World"));   
    menu.Detach();  
      

  3.   

    我换成了这句:
    ::AppendMenuW(this->m_hMenu,MF_POPUP,(UINT) menu.m_hMenu, _T("VC++")); 
    可以运行了 但是后面没有增加菜单 。
    奇怪了。。
      

  4.   

    这么奇怪。。我的是VS2010 WIN7 
     晕啊 无语了
      

  5.   

    在视类的右键菜单响应中添加如下代码试试: CMenu menu;   
    menu.CreatePopupMenu();   
    GetMenu()->AppendMenu(MF_POPUP,(UINT) menu.m_hMenu, _T("VC++"));   
    menu.AppendMenu(MF_STRING, 1101, _T("Hello"));   
    menu.AppendMenu(MF_STRING, 1102, _T("World"));   
    //显示菜单
    ClientToScreen(&point);
    menu.TrackPopupMenu(TPM_RETURNCMD|TPM_LEFTALIGN|TPM_LEFTBUTTON,point.x,point.y,this);
    menu.Detach(); 我是在VS 2010中调试成功的。
      

  6.   

    2楼的可以,不过menu要放h中:
    // .h 
    // CMenu m_menu;   
    m_menu.CreatePopupMenu();   
    m_menu.AppendMenu(MF_STRING , 111, _T("Hello"));   
    m_menu.AppendMenu(MF_STRING , 112, _T("World"));   
    GetMenu()->AppendMenu(MF_POPUP,(UINT) m_menu.m_hMenu, _T("VC++")); 
    其他:
    afx_msg void OnHello();
    ON_COMMAND(111, OnHello)
    void CMainFrame::OnHello() 
    {
    // TODO: Add your command handler code here
    AfxMessageBox("Hello");
    }
      

  7.   

    VS2010默认的是豪华菜单是无法改变的。
    要修改的话:
    在新建工程向导。到“用户界面功能”,“命令栏(菜单/工具栏/功能区)”选用“使用经典菜单(S)”。然后,按你的代码进行编程就可以了。
      

  8.   

    VS2010的MFC和VC6的有点区别 自己动手起来容易出现问题 教程上用的是VC6
      

  9.   

    其实,VS 2010中创建右键菜单最好的方法是:在资源中创建一个菜单资源,并添加自己需要的项,然后使用以下的代码:void CMyView::OnRButtonDown(UINT nFlags, CPoint point)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值
    ClientToScreen(&point);
    OnContextMenu(this, point); CScrollView::OnRButtonDown(nFlags, point);
    }void CMyView::OnContextMenu(CWnd* pWnd, CPoint point)
    {
    theApp.GetContextMenuManager()->ShowPopupMenu(IDR_POPUP_VIEW, point.x, point.y, this, TRUE);
    }
      

  10.   

    m_menu.CreatePopupMenu();
    GetParent()->GetMenu()->AppendMenu(MF_POPUP,(UINT)m_menu.m_hMenu,"PhoneBook");
    GetParent()->DrawMenuBar();