void CMainFrame::OnAdd() 
{
// TODO: Add your command handler code here
CMenu addMenu, *mainMenu;
if(!addMenu.LoadMenu(IDR_MENU1))
{
MessageBox("菜单装入失败!","错误",MB_OK | MB_ICONERROR);
return;
}
CString str = "颜色(&C)";
mainMenu = AfxGetMainWnd()->GetMenu();
mainMenu->InsertMenu(1, MF_POPUP | MF_BYPOSITION | MF_STRING,
(UINT)addMenu.GetSubMenu(0),str);
mainMenu->Detach();
addMenu.Detach();
DrawMenuBar();
}void CMainFrame::OnDelete() 
{
// TODO: Add your command handler code here
CMenu *mainMenu;
CString str;
mainMenu = GetMenu();
for(int i=mainMenu->GetMenuItemCount()-1;i>=0;i--)
{
    mainMenu->GetMenuString(i,str,MF_BYPOSITION);
    if(str=="颜色(&C)")
    mainMenu->DeleteMenu(i,MF_BYPOSITION);
    break;
}
mainMenu->Detach();
DrawMenuBar();
}

解决方案 »

  1.   

    调试。mainMenu->DeleteMenu(i,MF_BYPOSITION);是否能够执行到?
      

  2.   

    if(str=="颜色(&C)")
    改成
    if(str.Compare(_T("颜色(&C)")) == 0)
      

  3.   

    删除红色的那句,试试!void CMainFrame::OnAdd() 
    {
        // TODO: Add your command handler code here
        CMenu addMenu, *mainMenu;
        if(!addMenu.LoadMenu(IDR_MENU1))
        {
            MessageBox("菜单装入失败!","错误",MB_OK | MB_ICONERROR);
            return;
        }
        CString str = "颜色(&C)";
        mainMenu = AfxGetMainWnd()->GetMenu();
        mainMenu->InsertMenu(1, MF_POPUP | MF_BYPOSITION | MF_STRING,
            (UINT)addMenu.GetSubMenu(0),str);
        //mainMenu->Detach();
        addMenu.Detach();
        DrawMenuBar();
    }
      

  4.   

    InsertMenu为什么要从另外一个menu里载入?创建addMenu对象干吗?
      

  5.   


    改了这句以后,还是执行不到if语句里面的“mainMenu->DeleteMenu(i,MF_BYPOSITION);”
      

  6.   

    好我解决了,是在for循环中多加了个break;
      

  7.   

    添加删除可以了,但是加载的菜单有问题,问题出在红色那句上void CMainFrame::OnAdd() 
    {
        // TODO: Add your command handler code here
        CMenu addMenu, *mainMenu;
        if(!addMenu.LoadMenu(IDR_MENU1))
        {
            MessageBox("菜单装入失败!","错误",MB_OK | MB_ICONERROR);
            return;
        }
        CString str = "颜色(&C)";
        mainMenu = AfxGetMainWnd()->GetMenu();
        mainMenu->InsertMenu(1, MF_POPUP | MF_BYPOSITION | MF_STRING,
            (UINT)addMenu.GetSubMenu(0),str);
        mainMenu->Detach();
        addMenu.Detach();
        DrawMenuBar();
    }这句应该是 (UINT)((addMenu.GetSubMenu(0))->m_hMenu)