在该程序中,我新建了一个FormView,我想那它做主界面,而原先默认生成的视图做工作界面,不知道在什么时候创建新的视图及如何创建。各位高手请指教!(最好有代码)

解决方案 »

  1.   

    自己看一下CFrameWnd::OnCreateClient里的代码,应该有启示的。
      

  2.   

    我所知道的,也是我常用的两种:
    1.在app的initinstance里,加入其他模板。并重载ID_FILE_NEW.->onfilenew中打开第一个文档模板。通过菜单或消息打开其他可用模板,自动创建新的视图。(正规的方法)2.所有程序保持不变。在CMainfrme里,动态创建view.并加载相关资源,如menu,加速建等。
    通过菜单或消息,显示其他创建的视图。(旁门左道)--------------------------------------------
    不过,我一般用第二种,因为代码量少一些。
      

  3.   

    long CMainFrame::OnOutbarNotify(WPARAM wParam, LPARAM lParam)
    {
    switch (wParam)
    {
    case NM_OB_ITEMCLICK:
    // cast the lParam to an integer to get the clicked item
    {
    int flag=wndBar.GetFolderData(); if(flag==0)//判断是否为第一个Folder
    {
    int index = (int) lParam;
    if(index==0)       //响应第一个按钮
    {
    wndSplitter.DeleteView(0,1);
    wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView),CSize(0,70),NULL); 
    wndSplitter.RecalcLayout();

    if(index==1)       //响应第二个按钮
    {
    wndSplitter.DeleteView(0,1);
               wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView2),CSize(0,70),NULL);
                         wndSplitter.RecalcLayout();
    }
    if(index==2)       //响应第三个按钮
    {
    wndSplitter.DeleteView(0,1);
                         wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView3),CSize(0,70),NULL);
                         wndSplitter.RecalcLayout();
    }
    }
    else if(flag==1)//判断是否为第二个Folder
    {
    int index = (int) lParam;
    if(index==0)       //响应第一个按钮
    {
    wndSplitter.DeleteView(0,1);
    wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView4),CSize(0,70),NULL);
                         wndSplitter.RecalcLayout();
    }
    if(index==1)
    {
    wndSplitter.DeleteView(0,1);
    wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView5),CSize(0,70),NULL);
                         wndSplitter.RecalcLayout();
    }
    if(index==2)
    {
    wndSplitter.DeleteView(0,1);
    wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView6),CSize(0,70),NULL);
                         wndSplitter.RecalcLayout();
    }
    if(index==3)
    {
    wndSplitter.DeleteView(0,1);
    wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView7),CSize(0,70),NULL);
                         wndSplitter.RecalcLayout();
    }
    }
    else if(flag==2)//判断是否为第三个Folder
    {
    int index = (int) lParam;
    if(index==0)       //响应第一个按钮
    {
    wndSplitter.DeleteView(0,1);
    wndSplitter.CreateView(0,1,RUNTIME_CLASS(CTestView8),CSize(0,70),NULL);
                         wndSplitter.RecalcLayout();
    }
    }
    }
    return 0; case NM_OB_ONLABELENDEDIT:
    // cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited item
    // return 1 to do the change and 0 to cancel it
    {
    OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
    TRACE2("Editing item %d, new text:%s\n", pOI->index, pOI->cText);
    }
    return 1; case NM_OB_ONGROUPENDEDIT:
    // cast the lParam to an OUTBAR_INFO * struct; it will contain info about the edited folder
    // return 1 to do the change and 0 to cancel it
    {
    OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
    TRACE2("Editing folder %d, new text:%s\n", pOI->index, pOI->cText);
    }
    return 1; case NM_OB_DRAGITEM:
    // cast the lParam to an OUTBAR_INFO * struct; it will contain info about the dragged items
    // return 1 to do the change and 0 to cancel it
    {
    OUTBAR_INFO * pOI = (OUTBAR_INFO *) lParam;
    TRACE2("Drag item %d at position %d\n", pOI->iDragFrom, pOI->iDragTo);
    }
    return 1;
    }
    return 0;
    }