删除MFC单文档默认菜单栏的两种方法

来源:互联网 发布:贺福初是谁的女婿知乎 编辑:程序博客网 时间:2024/05/16 13:39

删除MFC单文档默认菜单栏的两种方法  

新建一个MFC单文档程序,默认都有四个菜单栏:文件、编辑、视图和帮助。怎么把这四个菜单栏删除掉呢?有两种方法:


第一种方法:重载框架类的Create函数,具体代码如下:


view plaincopy to clipboardprint?
BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , LPCTSTR lpszMenuName , DWORD dwExStyle , CCreateContext* pContext)  
{   
    // TODO: 在此添加专用代码和/或调用基类   
// return CFrameWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, // //pParentWnd, lpszMenuName, dwExStyle, pContext);   
     HMENU nIDorHMenu = NULL;   
     return CFrameWnd::CreateEx(dwExStyle,lpszClassName,lpszWindowName,dwStyle,   
         rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,   
         pParentWnd->GetSafeHwnd(),   
         nIDorHMenu,   
         (LPVOID)pContext);   

BOOL CMainFrame::Create(LPCTSTR lpszClassName, LPCTSTR lpszWindowName, DWORD dwStyle , const RECT& rect , CWnd* pParentWnd , LPCTSTR lpszMenuName , DWORD dwExStyle , CCreateContext* pContext)
{
// TODO: 在此添加专用代码和/或调用基类
// return CFrameWnd::Create(lpszClassName, lpszWindowName, dwStyle, rect, // //pParentWnd, lpszMenuName, dwExStyle, pContext);
     HMENU nIDorHMenu = NULL;
return CFrameWnd::CreateEx(dwExStyle,lpszClassName,lpszWindowName,dwStyle,
   rect.left,rect.top,rect.right-rect.left,rect.bottom-rect.top,
   pParentWnd->GetSafeHwnd(),
   nIDorHMenu,
   (LPVOID)pContext);
}

第二种方法:手动删除所有菜单项。具体是先定义一个删除所有菜单项的函数:


view plaincopy to clipboardprint?
/*! 
* \brief 删除所有的菜单栏。 

* 删除窗口的所有菜单栏。 
* \return 无。 
*/ 
static void DelAllMenu(HMENU hMenu)   
{   
    // 首先删除多余的菜单项   
    int Menucount = GetMenuItemCount(hMenu);   
    for (int i = Menucount-1;i>-1;i--)   
    {   
        ::DeleteMenu(hMenu,i, MF_BYPOSITION);   
    }     

/*!
* \brief 删除所有的菜单栏。
*
* 删除窗口的所有菜单栏。
* \return 无。
*/
static void DelAllMenu(HMENU hMenu)
{
// 首先删除多余的菜单项
int Menucount = GetMenuItemCount(hMenu);
for (int i = Menucount-1;i>-1;i--)
{
   ::DeleteMenu(hMenu,i, MF_BYPOSITION);

}


然后在框架类的OnCreate函数调用这个函数,具体如下:


view plaincopy to clipboardprint?
int CMainFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)   
{   
    if (CFrameWnd::OnCreate(lpCreateStruct) == -1)   
        return -1;   
       
    if (!m_wndToolBar.CreateEx(this, TBSTYLE_FLAT, WS_CHILD | WS_VISIBLE | CBRS_TOP   
        | CBRS_GRIPPER | CBRS_TOOLTIPS | CBRS_FLYBY | CBRS_SIZE_DYNAMIC) ||   
        !m_wndToolBar.LoadToolBar(IDR_MAINFRAME))   
    {   
        TRACE0("未能创建工具栏\n");   
        return -1;      // 未能创建   
    }   
    if (!m_wndStatusBar.Create(this) ||   
        !m_wndStatusBar.SetIndicators(indicators,   
          sizeof(indicators)/sizeof(UINT)))   
    {   
        TRACE0("未能创建状态栏\n");   
        return -1;      // 未能创建   
    }   
    // TODO: 如果不需要工具栏可停靠,则删除这三行   
    m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);   
    EnableDocking(CBRS_ALIGN_ANY);   
    DockControlBar(&m_wndToolBar);   
    // 获取窗口的菜单句柄   
    CMenu *pMenu = GetMenu();   
    if (NULL!=pMenu)   
    {   
        DelAllMenu(pMenu->GetSafeHmenu());   
    }   
    return 0;   
}

分享到:        
阅读(588)| 评论(1)| 转载 (0) |举报