程序初始运行时是一个formview,上面是一些button,点击不同的button可以显示不同的View,(开始的formview当然不在了),哪儿有相关的文章吗?初学Vc望高手指教!谢谢!!!

解决方案 »

  1.   

    可以参考:http://www.vckbase.net/document/viewdoc/?id=691
      

  2.   

    这个例子中使用了三种View,你可以下载下来看看!
      

  3.   

    //////////////////////////////////////////////////////////////////////////
    //多个视图的切换。                                                  
    //依如下步骤增加一个视图:
    //a.)修改#define NUMVIEWS 的值
    //b.)在CreateAllTheView()里相应位置增加:                
    //    m_pViews[n] = (CView*) new MyViewClass;和
    //   ((MyViewClass*)m_pViews[n])->OnInitialUpdate();行
    //c.)在GetIndex(int nFormID)里增加相应的case
    //////////////////////////////////////////////////////////////////////////
    CView *  CMyApp::SwitchToView(int nViewID)
    {
    int nIndex = GetIndex(nViewID); ASSERT(nIndex>=0&&nIndex<NUMVIEWS);
    CView* pNewView = m_pViews[nIndex];
    CView* pActiveView =((CFrameWnd*) m_pMainWnd)->GetActiveView();
    if ( !pActiveView ) // 当前没有激活的视图
    return NULL;
    if ( pNewView == pActiveView ) // 当前视图和需要切换的视图相同
    return pActiveView; // 交换视图的窗口ID,使RecalcLayout()可以工作
    UINT temp = ::GetWindowLong(pActiveView->m_hWnd, GWL_ID);
    ::SetWindowLong(pActiveView->m_hWnd, GWL_ID, ::GetWindowLong(pNewView->m_hWnd, GWL_ID));
    ::SetWindowLong(pNewView->m_hWnd, GWL_ID, temp);
    // 显示新的视图,隐藏前一个视图
    pActiveView->ShowWindow(SW_HIDE);
    pNewView->ShowWindow(SW_SHOW);
    ((CFrameWnd*) m_pMainWnd)->SetActiveView(pNewView);
    ((CFrameWnd*) m_pMainWnd)->RecalcLayout();
    pNewView->Invalidate();
    return pActiveView;
    }// 根据Form的ID获得m_pViews[]中的下标
    int CMyApp::GetIndex(int nFormID)
    {
    switch( nFormID) 
    {
    case IDD_DRIVINGLICENCEAPPLICATION_FORM:
    return 0;
    case IDD_FORMVIEW_ENROL:
    return 1;
    case IDD_FORMVIEW_CHECKUP:
    return 2;
    default:
    return -1;
    }
    // return 0;
    }// 创建所有视
    void CMyApp::CreateAllTheView(void)
    {
    m_pViews[0] = (CView*) new CMyView;
    m_pViews[1] = (CView*) new EnrolFormView;
    m_pViews[2] = (CView*) new CheckupFormView; CDocument* pCurrentDoc = ((CFrameWnd*) m_pMainWnd)->GetActiveDocument();
    // 初始化创建上下文相关指针
    CCreateContext newContext;
    newContext.m_pNewViewClass = NULL;
    newContext.m_pNewDocTemplate = NULL;
    newContext.m_pLastView = NULL;
    newContext.m_pCurrentFrame = NULL;
    newContext.m_pCurrentDoc = pCurrentDoc;
    // 最初激活视的ID为AFX_IDW_PANE_FIRST,对新创建的视图增加这个值,注意对CSplitterWnd不能这样使用
    // UINT viewID[NUMVIEWS];
    // viewID[1] = AFX_IDW_PANE_FIRST + 1;
    CRect rect(0, 0, 0, 0);
    for(int nView=1; nView<NUMVIEWS; nView++)
    {
    // 创建新的视图,创建的视图在应用中永久存在,直到应用程序退出,应用程序会自动删除新创建的视图
    m_pViews[nView]->Create(NULL, NULL, 
    (AFX_WS_DEFAULT_VIEW & ~WS_VISIBLE),
    // AFX_WS_DEFAULT_VIEW代表(WS_BORDER | WS_VISIBLE | WS_CHILD)
    // rect, m_pMainWnd, viewID[nView], &newContext);
    rect, m_pMainWnd, AFX_IDW_PANE_FIRST + nView, &newContext);
    } // 当文档模板创建视图的时候,会自动发送WM_INITIALUPDATE消息,因此对于我们自己创建的视图,需要人工发送这条消息
    ((EnrolFormView*)m_pViews[1])->OnInitialUpdate();
    ((CheckupFormView*)m_pViews[2])->OnInitialUpdate();
    }