欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

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

程序员文章站 2024-03-07 21:06:57
有两种方法: 第一种方法:重载框架类的create函数,具体代码如下: 复制代码 代码如下: bool cmainframe::create(lpctstr lpszcla...
有两种方法:

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

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);
}

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

/*!
* \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函数调用这个函数,具体如下:
复制代码 代码如下:

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;
}