我如下做,但切换不了,只有一个视图,你看问题在哪里,还缺什么?
1  XXX.h : header file
 enum {formview1,formview2,formview3};
 2、 声明 int m_selectView;在构造函数初始化  m_selectView=formview1;
  那么就为void SwitchView(int m_selectView);
 3、void XXX::ShowAllCtrls()
 {
 switch(m_selectView)
 {
                     case formview1:{一大堆代码}
                     case formview2:{一大堆代码}
                     case formview3:{一大堆代码}
 }
 4、
 void CChildFrame::OnAdver() 
 {
 Adverse* pView = (Adverse*)(m_wndSplitter.GetPane(0,0));
 pView->SwitchView(formview2);
 }
///////////////////////
在XXX.h int m_selectView
void XXX::SwitchView(int m_selectView)

解决方案 »

  1.   

    “那么就为void SwitchView(int m_selectView);”-----是什么意思?这个函数在哪里声明?是如何实现的?从函数名称看它是关键!!
      

  2.   

    MSDN上有一个类似切换ForView的例子,在SAMPLES\VC98\mfc\advanced\collect下,原来是针对标准模板的例子,不过也演示了多FormView切换。你要是没有的话留个信箱我发给你。WinRar压缩包53k。
    代码我简单的贴一下,其中 pNewViewClass = RUNTIME_CLASS(CStringListView)中的每一个View都是一个FormView :
    void CMainFrame::OnExample(UINT nCmdID){if (nCmdID == m_nCurrentExample)  return;  // already selectedCView* pOldActiveView = GetActiveView();
    ::SetWindowLong(pOldActiveView->m_hWnd, GWL_ID, m_nCurrentExample);CRuntimeClass* pNewViewClass;
    switch (nCmdID) {
    case ID_STRINGLIST:
    pNewViewClass = RUNTIME_CLASS(CStringListView);
    break;
    case ID_TYPEDLIST:
    pNewViewClass = RUNTIME_CLASS(CTypedPtrListView);
    break;
    case ID_INTLIST:
    pNewViewClass = RUNTIME_CLASS(CIntListView);
    break;
    case ID_DWORDARRAY:
    pNewViewClass = RUNTIME_CLASS(CDWordArrayView);
    break;
    case ID_TYPEDPTRARRAY:
    pNewViewClass = RUNTIME_CLASS(CTypedPtrArrayView);
    break;
    case ID_POINTARRAY:
    pNewViewClass = RUNTIME_CLASS(CPointArrayView);
    break;
    case ID_MAPSTRINGTOSTRING:
    pNewViewClass = RUNTIME_CLASS(CMapStringToStringView);
    break;
    case ID_TYPEDPTRMAP:
    pNewViewClass = RUNTIME_CLASS(CTypedPtrMapView);
    break;
    case ID_MAPDWORDTOMYSTRUCT:
    pNewViewClass = RUNTIME_CLASS(CMapDWordToMyStructView);
    break;
    default:
    ASSERT(0);
    return;
    }// create the new view
    CCreateContext context;
    context.m_pNewViewClass = pNewViewClass;
    context.m_pCurrentDoc = GetActiveDocument();
    CView* pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
    if (pNewView != NULL){
    // the new view is there, but invisible and not active...
    pNewView->ShowWindow(SW_SHOW);
    pNewView->OnInitialUpdate();
    SetActiveView(pNewView);
    RecalcLayout();
    m_nCurrentExample = nCmdID;
    // finally destroy the old view...
    pOldActiveView->DestroyWindow();
    }}