MFC BCGPOrganizar例子移值

1.采用MDI工程。其它的 属性,输出窗口等都不要。

2.按照BCGPOrganizar 例子先把 ribbon 功能区移植过来。别的默认都没改。

发现BCGPOrganizar例子中的mainfram是继承于CBCGPFrameWnd,

而新建的工程 中的mainfram是继承于CBCGPMDIFrameWnd, 这里有个不同,以后要注意

3.ribbon移值完后运行:

启动过程有个崩溃,忽略后能 显示出来界面,,关闭界面 又会有一个 崩溃。

在mainfram中的oncreate函数中 注掉以下代码: 不知道是不是有冲突了,暂时不管

//if (!m_wndMenuBar.Create(this))
    //{
    //    TRACE0("Failed to create menubar ");
    //    return -1;      // fail to create
    //}

    //m_wndMenuBar.SetBarStyle(m_wndMenuBar.GetBarStyle() | CBRS_SIZE_DYNAMIC);

    //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, 0, 0, FALSE, 0, 0, IDB_TOOLBAR_HC))
    //{
    //    TRACE0("Failed to create toolbar ");
    //    return -1;      // fail to create
    //}

    //if (!m_wndStatusBar.Create(this) ||
    //    !m_wndStatusBar.SetIndicators(indicators,
    //      sizeof(indicators)/sizeof(UINT)))
    //{
    //    TRACE0("Failed to create status bar ");
    //    return -1;      // fail to create
    //}

    //CString strMainToolbarTitle;
    //strMainToolbarTitle.LoadString(IDS_MAIN_TOOLBAR);
    //m_wndToolBar.SetWindowText(strMainToolbarTitle);

    //// TODO: Delete these three lines if you don't want the toolbar to be dockable
    //m_wndMenuBar.EnableDocking(CBRS_ALIGN_ANY);
    //m_wndToolBar.EnableDocking(CBRS_ALIGN_ANY);
    //EnableDocking(CBRS_ALIGN_ANY);
    //EnableAutoHideBars(CBRS_ALIGN_ANY);
    //DockControlBar(&m_wndMenuBar);
    //DockControlBar(&m_wndToolBar);
 注掉后编译过行正常了

4.添加2个视图类。

5.添加2个ribbon.

6.关联ribbon切换的消息

7.在doc类中添加createView

8.在mainfram中重载oncreateclient函数:

并添加代码:

COfficeDemoDoc* pDoc = DYNAMIC_DOWNCAST(COfficeDemoDoc, pContext->m_pCurrentDoc);

    if (pDoc != NULL)
    {
        pDoc->CreateViews(this, pContext);
    }

    return CBCGPMDIFrameWnd::OnCreateClient(lpcs, pContext);//  原来这没有MDI.  不知道有没有影响。

9.运行 到 上面代码的COfficeDemoDoc* pDoc = DYNAMIC_DOWNCAST(COfficeDemoDoc, pContext->m_pCurrentDoc);这一步崩溃,显示pContext为空

是因为MDI程序和SDI程序处理不一样。

SDI中可以在oncreateclient中处理,指针不为NULL,

但是MDI 就不行,是NULL,就报错,还不能这么去 调用createviews.

但是也建了个SDI的工程,以上面的方法移植了一下,但是视图类若 继承于CBCGPTabView,则 以最大化窗体  运行起来有时候会弹出错误,虽然可以忽略,

但是不以最大化运行就 正常

SDI下 不能用BCGPTabView实现切换,切换不了,还卡屏

放弃用tabview.用属性页试试

原文地址:https://www.cnblogs.com/totogo/p/10609028.html