请问各位一个问题,在多文档界面中,能不能把菜单去掉和隐藏?

解决方案 »

  1.   

    try CMyView::OnUpdateMenuname(CCmdUI* pCmdUI){
    pCmdUI->Enable(flag);
    }
    flag is used to show or hide the menu
      

  2.   

    看看菜单类的成员函数吧,
    我曾经为了隐藏工具条用了SetHeight(0),呵呵。
      

  3.   

    MFC的MDI框架中,必须要求主菜单有二个以上的子菜单,MFC默认取倒数第二个子菜单作为窗口菜单(即打开多个文档时向此菜单下增加菜单项)。可以通过以下步骤去掉此菜单:
    1.从CWnd派生一个类,如CMyMDIClient
    2.覆盖虚函数CMyMDIClient::DefWindowProc,在函数首部加入:
    if(message == WM_MDIREFRESHMENU) return TRUE;
    3.CMainFrame中增加成员变量:
    CMyMDIClient m_wndClient;
    4.覆盖虚函数CMainFrame::OnCreateClient,修改函数体为:
    BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) 
    {
    if(!CreateClient(lpcs, NULL)) return FALSE; m_wndClient.SubclassWindow(m_hWndMDIClient); BOOL b = SetMenu(NULL); return TRUE;
    }
    5.覆盖虚函数CMainFrame::CreateClient,修改函数体为:
    BOOL CMainFrame::CreateClient(LPCREATESTRUCT lpCreateStruct,
    CMenu* pWindowMenu)
    {
    //此函数体从MFC的CMDIFrameWnd::CreateClient拷贝出来,注释二句话而已
    ASSERT(m_hWnd != NULL);
    ASSERT(m_hWndMDIClient == NULL);
    DWORD dwStyle = WS_VISIBLE | WS_CHILD | WS_BORDER |
    WS_CLIPCHILDREN | WS_CLIPSIBLINGS |
    MDIS_ALLCHILDSTYLES;    // allow children to be created invisible
    DWORD dwExStyle = 0;
    // will be inset by the frame// if (afxData.bWin4) //不知如何引入afxData,待进一步探讨
    {
    // special styles for 3d effect on Win4
    dwStyle &= ~WS_BORDER;
    dwExStyle = WS_EX_CLIENTEDGE;
    } CLIENTCREATESTRUCT ccs;
    // ccs.hWindowMenu = pWindowMenu->GetSafeHmenu(); //我注释的
    // set hWindowMenu for MFC V1 backward compatibility
    // for MFC V2, window menu will be set in OnMDIActivate
    ccs.idFirstChild = AFX_IDM_FIRST_MDICHILD; if (lpCreateStruct->style & (WS_HSCROLL|WS_VSCROLL))
    {
    // parent MDIFrame's scroll styles move to the MDICLIENT
    dwStyle |= (lpCreateStruct->style & (WS_HSCROLL|WS_VSCROLL)); // fast way to turn off the scrollbar bits (without a resize)
    ModifyStyle(WS_HSCROLL|WS_VSCROLL, 0, SWP_NOREDRAW|SWP_FRAMECHANGED);
    } // Create MDICLIENT control with special IDC
    if ((m_hWndMDIClient = ::CreateWindowEx(dwExStyle, _T("mdiclient"), NULL,
    dwStyle, 0, 0, 0, 0, m_hWnd, (HMENU)AFX_IDW_PANE_FIRST,
    AfxGetInstanceHandle(), (LPVOID)&ccs)) == NULL)
    {
    TRACE(_T("Warning: CMDIFrameWnd::OnCreateClient: failed to create MDICLIENT.")
    _T(" GetLastError returns 0x%8.8X\n"), ::GetLastError());
    return FALSE;
    }
    // Move it to the top of z-order
    ::BringWindowToTop(m_hWndMDIClient); return TRUE;
    }
    6.删除菜单ID或者修改菜单ID的数值现在编译连接,应该没有菜单了吧:)
      

  4.   

    CMenu *pMenu=GetMenu(); pMenu->DeleteMenu(3,MF_BYPOSITION);
    pMenu->DeleteMenu(2,MF_BYPOSITION);
    pMenu->DeleteMenu(1,MF_BYPOSITION);
    pMenu->DeleteMenu(0,MF_BYPOSITION);