SDIにて複数ビューを使う方法
必要なビューを CMainFrame にメンバとして登録(m_pMainView, m_pSubView など)
OnCreateClient()をオーバーライトする。
さらに、ビュー変更用の関数(ChangeView)を作る。

BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext)
{
  pContext->m_pNewViewClass = RUNTIME_CLASS(CMainView);
  m_pMainView = (CMainView*)CreateView(pContext, AFX_IDW_PANE_FIRST);
  pContext->m_pNewViewClass = RUNTIME_CLASS(CSubView);
  m_pSubView = (CSubView*)CreateView(pContext, AFX_IDW_PANE_FIRST+1);
  return TRUE;
}

BOOL CMainFrame::ChangeView(CView* pNewView)
{
  if(!pNewView)
      return  FALSE;
  CView* pNowView = GetActiveView();
  if(!pNowView)
      return FALSE; //通常考えられないが

  if(pNowView == pNewView)
      return  FALSE;

  // Viewの子ウインドウIDの入換え
  int nNowViewID = pNowView->GetDlgCtrlID();
  int nNewViewID = pNewView->GetDlgCtrlID();
  pNowView->SetDlgCtrlID(nNewViewID);
  pNewView->SetDlgCtrlID(nNowViewID);

  pNowView->ShowWindow(SW_HIDE); //いま表示されていのを消す
  pNewView->ShowWindow(SW_SHOW); //指定のビューを表示する
  SetActiveView(pNewView);
  RecalcLayout(); //フレーム内の位置を再計算
  return TRUE;
}

void CMainFrame::OnChView() // ビュー変更メッセージハンドラ
{
  if (GetActiveView() == m_pMainView)
      ChangeView(m_pSubView);
  else
      ChangeView(m_pMainView);
}

(この方法では常に2つのビューはメモリにあるのでちょっと問題か?手っ取り早いが)


VC覚書きページ...