首先谢谢CSDN中XDJM给我这些天给我地帮助,不过小弟才疏学浅,还是又不少问题,希望能得到各位地帮助。
我基于单文档建了一个工程,遇到如下问题:
1:现在要想通过菜单触发再建立一个视图,
2:希望该新建地视图中可以添加编辑框,按钮等控件
怎么做呢?

解决方案 »

  1.   

    想在试图里面做那些东西可以自己create,然后添加消息影射不明白你的意思,添加一个试图?代替原来的吗?那你还不如直接在原来的上面做
    两个放在一起吗?那你就分割视图啊?
      

  2.   

    在一些情况下,应用程序有许多信息要显示,当一个窗口内显示不下时,VC提供的MDI应用程序可以解决这个问题,但是如果应用程序只是对单个文档,采用多种方式显示,则采用SDI更合适。那么,如何在单文档应用程序中实现多视图呢?缺省情况下,派生类的构造函数是pretected类型的,必须将它改为public类型,因为我们将会动态生成派生视图类并切换活动的视图。也可以一次生成所有的视图,但是这样造成系统资源的极大浪费。1  首先利用资源编辑器新建4个对话框,在对话框中添加需要的控件,各个对话框的ID分别为IDD_MULTIVIEW_FORM,IDD_MULTIVIEW_FORM2,IDD_MULTIVIEW_FORM3,IDD_MULTIVIEW_FORM42  为每一个对话框创建一个CFormView类的派生类,分别为:CView1,CView2,CView3,CView43  在应用程序的初始化文件中用CView1替换原先的视图,这样程序启动后的缺省显示视图是CView1,修改后的部分代码如下:
    CSingleDocTemplate* pDocTemplate;
    pDocTemplate = new CSingleDocTemplate(
    IDR_MAINFRAME,
    RUNTIME_CLASS(CMultiViewDoc),
    RUNTIME_CLASS(CMainFrame),       // main SDI frame window
    RUNTIME_CLASS(CView1));
    AddDocTemplate(pDocTemplate);4  利用资源编辑器,添加几个菜单,并添加相应的消息处理函数:
    void CMainFrame::OnViewView1() 
    {
    SwitchToForm(IDD_MULTIVIEW_FORM);   
    }void CMainFrame::OnViewView2() 
    {
    SwitchToForm(IDD_MULTIVIEW_FORM2);   
    }void CMainFrame::OnViewView3() 
    {
    SwitchToForm(IDD_MULTIVIEW_FORM3);   
    }void CMainFrame::OnViewView4() 
    {
    SwitchToForm(IDD_MULTIVIEW_FORM4);   
    }在SDI中CFrame的派生类即CMainFrame控制着所有的视图,而且它允许用户通过消息处理进行视图的切换。进行视图切换的原理很简单,只是断开和旧视图的连接并把他删除,创建一个新视图,将文档和它相连,设置几个标志,然后显示新视图,SwitchToForm函数是进行视图切换的代码函数。void CMainFrame::SwitchToForm(int nForm)
    {
      //CDocument* pDoc = GetActiveDocument();
        CView *pOldActiveView=GetActiveView();             //保存旧视图
        CView *pNewActiveView=(CView*)GetDlgItem(nForm);   //取得新视图
        if(pNewActiveView==NULL)
        {
            switch(nForm)
                //这些ID是对话框的标志符,但也可以用其他的标志
            {
            case IDD_MULTIVIEW_FORM :
                pNewActiveView=(CView*)new CView1;
                break;
            case IDD_MULTIVIEW_FORM2 :
                pNewActiveView=(CView*)new CView2;
                break;
            case IDD_MULTIVIEW_FORM3 :
                pNewActiveView=(CView*)new CView3;
                break;
            case IDD_MULTIVIEW_FORM4 :
                pNewActiveView=(CView*)new CView4;
                break;
            }
            CCreateContext context;   //将文挡和视图相连
            context.m_pCurrentDoc=pOldActiveView->GetDocument();
    pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
                CFrameWnd::rectDefault, this, nForm, &context);
            pNewActiveView->OnInitialUpdate();
        }
        SetActiveView(pNewActiveView);        //改变活动的视图
        pNewActiveView->ShowWindow(SW_SHOW);  //显示新的视图
        pOldActiveView->ShowWindow(SW_HIDE);  //隐藏旧的视图    if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView1))
    pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM);else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView2))
    pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM2);else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView3))
    pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM3);else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CView4))
    pOldActiveView->SetDlgCtrlID(IDD_MULTIVIEW_FORM4);    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
        
        delete pOldActiveView;   //删除旧视图RecalcLayout();          //调整框架窗口
    }
      

  3.   

    http://www.czvc.com/code/MultiView1.rar