我想用新view 在FRAME中换掉原来的view 怎么做?

解决方案 »

  1.   

    MFC的MDI程序产生的视是同种类型的视,已有很多文章讲过如何实现真真的多视。这里介绍一种简单的实现方法。在MDI程序的CChildFrame类中加入一个CreateView函数,调用它可实现不同类型的共存,当然你也可以删除它。1.定义两个变量UINT m_DocType;//选择的文档  
    UINT m_nCurrentExample=0;//当前的文档类型void CChildFrame::CreateViewDoc()
    {
       // TODO: Add your command handler code here
       CView* pOldActiveView = GetActiveView();   ::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, m_nCurrentExample);   CRuntimeClass* pNewViewClass;
       switch (m_DocType)
       {
        case 1://由不同的文档类型,调用不同的视类,下面是两个假设的视
          pNewViewClass = RUNTIME_CLASS(CFileScopeView);
          break;
        case 2:
          // pNewViewClass = RUNTIME_CLASS(CRTFView);
          break;
        default:
          ASSERT(0);
          return;
        }   //创建新的视
       CCreateContext context;
       context.m_pNewViewClass = pNewViewClass;
       context.m_pCurrentDoc = GetActiveDocument();
       CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
       if (pNewView != NULL)
      {
        // 创建成功则显示。
        pNewView->ShowWindow(SW_SHOW);
        SetActiveView(pNewView);
        m_nCurrentExample = m_DocType;
        // 如果需要,可关闭当前视
        pOldActiveView->DestroyWindow();
        pNewView->OnInitialUpdate();
        RecalcLayout();
       }
       else
      {
        AfxMessageBox("显示失败");
       }