我现在后期想加入一个自己新插入的类CFormView,在某MenuItem点击后会出现自己新建的这个CFormView,如何实现啊?

解决方案 »

  1.   

    现在在MDI中能出来了,但它没有最大化,最小化按钮,并且窗体上的控件不能被激活,不像file->new
    那样能出来一个Child窗体,附此代码:
    void CMainFrame::OnTwo() 
    {
       SwitchToForm(IDD_DIALOG2);
    }void CMainFrame::SwitchToForm(int nForm)
    {
      //CDocument* pDoc = GetActiveDocument();
        CView *pOldActiveView=GetActiveView();             //保存旧视图
        CView *pNewActiveView=(CView*)GetDlgItem(nForm);   //取得新视图
        if(pNewActiveView==NULL)
        {
            switch(nForm)
                //这些ID是对话框的标志符,但也可以用其他的标志
            {
            case IDD_DIALOG1 :
                pNewActiveView=(CView*)new COne;
                break;
            case IDD_DIALOG2 :
                pNewActiveView=(CView*)new CTwo;
                break;
            }
    CCreateContext context;   //将文挡和视图相连
            context.m_pCurrentDoc=pOldActiveView->GetDocument();
    if (pNewActiveView==NULL)
    {
         AfxMessageBox("aaa");
    }
    else
    {
    AfxMessageBox("bbb");

    pNewActiveView->Create(NULL, NULL, WS_BORDER|WS_CHILD ,
                this->rectDefault, this, nForm, &context);        pNewActiveView->OnInitialUpdate();
        }
        SetActiveView(pNewActiveView);        //改变活动的视图
        pNewActiveView->ShowWindow(SW_SHOW);  //显示新的视图
        pOldActiveView->ShowWindow(SW_HIDE);  //隐藏旧的视图    if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(COne))
    pOldActiveView->SetDlgCtrlID(IDD_DIALOG1); else if(pOldActiveView->GetRuntimeClass() ==RUNTIME_CLASS(CTwo))
    pOldActiveView->SetDlgCtrlID(IDD_DIALOG2);    pNewActiveView->SetDlgCtrlID(AFX_IDW_PANE_FIRST);
        
         delete pOldActiveView;   //删除旧视图

    RecalcLayout();          //调整框架窗口}
      

  2.   

    我觉的你应该在New Window 这个框架自动生成的菜单中添加自己相应代码,如在用户点击这个菜单的时候你就弹出一个对话框让用户选择哪一种方式的View。我们在CChildFrame中的OnCreateClient中
    可以根据用户选择的不同View来设置pContext中的CurView的值这样就可以生成不同的View了。当然你也可以使用多文档类型的结构也可以;另外你也可以考虑使用拆分窗口的方式来实现这一功能;
    总之,我觉的你不应该自己来创建CChildFrame,而应该有MFC来给你创建,你只是在CChildFrame中创建它的Client的时候才去干涉让它创建自己要求的View的风格;