本帖最后由 gjx18 于 2011-03-11 08:48:54 编辑

解决方案 »

  1.   

    InsertMenuW() 是否成功,估计失败了,造成后面访问指针出错
      

  2.   


    那个东西必须用的,是visual studio 2008 的一个补丁,可以直接生成VC界面的框架,属于官方合理程序,我们需要VC界面下的信息输出框,目前就是想知道跟它自动生成的哪句代码冲突了,根据经验应该是跟int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)里的代码冲突,但由于不精通VC,找不到冲突的语句。
      

  3.   

    可以找一个没有安装的,生成的代码,然后跟你安装的对比一下,CMainFrame看区别的代码
      

  4.   

    调用GetMenu失败,返回的是NULL。
    这样获取HMENU hMenu = m_wndMenuBar.GetHMenu();
    CMenu* pMenu = CMenu::FromHandle(hMenu);
    m_wndMenuBar 是CMainFrame的成员,类型是CMFCMenu。
      

  5.   

    刚才写错了,不是CMFCMenu,是CMFCMenuBar
      

  6.   


    把这两句代码直接加进去还是替换掉程序里的语句,提示“m_wndMenuBar”: 未声明的标识符,m_wndMenuBar要自己定义吗?
      

  7.   

    m_wndMenuBar是CMainFrame的成员变量,你在CMyDialog当然无法访问。你先在CMainFrame里,添加个成员函数
    CMenu* CMainFrame::GetMainMenu()
    {
    HMENU hMenu = m_wndMenuBar.GetHMenu();
    CMenu* pMenu = CMenu::FromHandle(hMenu);
    return pMenu;
    }在CmyDialog里,调用这个函数,来代替GetMenu()
      

  8.   


    我是这样写的:
    CMFCMenuBar m_wndMenuBar;
    HMENU hMenu = m_wndMenuBar.GetHMenu();
    CMenu* pMenu = CMenu::FromHandle(hMenu);然后用pMenu 替换掉程序里原来的menu.m_hMenu
    是这样吗?
    可是这样提示的有未处理异常和访问冲突跟我以前的程序是一样的。
      

  9.   


    不行啊!提示:1>e:\visual studio 2008\projects\laserdetection4\laserdetection4\mydialog.cpp(76) : error C2227: “->InsertMenuW”的左边必须指向类/结构/联合/泛型类型
    1>        类型是“'unknown-type'”
    1>e:\visual studio 2008\projects\laserdetection4\laserdetection4\mydialog.cpp(76) : error C3861: “GetMainMenu”: 找不到标识符
      

  10.   

    ... GetMenu()->InsertMenuW(3, MF_POPUP|MF_BYPOSITION, (UINT)menu.m_hMenu, (LPCTSTR)(CString)m_vip1);
    改为((CMainFrame*)AfxGetMainFrame())->GetMainMenu()->InsertMenuW(3, MF_POPUP|MF_BYPOSITION, (UINT)menu.m_hMenu, (LPCTSTR)(CString)m_vip1);
    记得在mydialog.cpp里,加CMainFrame的头文件
      

  11.   


    改了还是不行,头文件一直有加,现在提示:
    1>e:\visual studio 2008\projects\laserdetection4\laserdetection4\mydialog.cpp(77) : error C2227: “->GetMainMenu”的左边必须指向类/结构/联合/泛型类型
    1>        类型是“'unknown-type'”
    1>e:\visual studio 2008\projects\laserdetection4\laserdetection4\mydialog.cpp(77) : error C2227: “->InsertMenuW”的左边必须指向类/结构/联合/泛型类型
    1>e:\visual studio 2008\projects\laserdetection4\laserdetection4\mydialog.cpp(77) : error C3861: “AfxGetMainFrame”: 找不到标识符
      

  12.   

    刚才写错了,是AfxGetMainWnd,不是AfxGetMainFrame
      

  13.   


    我把问题解决了,给前面加GetParent()调用,
    GetParent()->GetMenu()->InsertMenuW(3, MF_POPUP|MF_BYPOSITION, (UINT)menu.m_hMenu, (LPCTSTR)(CString)m_vip1);
    以前用过这个方法,不知道为啥没有成功,现在试却成功了,不过还是谢谢你,CSDN就把分给你好了,以后VC有问题再向你请教