現在、MFC,SDI,VC6にてアプリケーションを作成しています。
SDIのベースは、CViewを親にして作成しています。
ここにCFormViewを親にしたウィンドウを貼り付けようと考えています。
(行いたいことは、メニューイベントにより、
ウィンドウ上のCFormViewを動的に切り替えたいと思っています。)
私は以下の手順でやろうと思っています。
SDIのベース:CViewBase
切り替え用:CFormView1 *CForm1
切り替え用:CFormView2 *CForm2
と便宜上、定義します。
1) CViewBaseのOnCreateにて、フォームの動的生成
CForm1 = new CForm1();
CForm2 = new CForm2();
CForm1->Create( xxx );
CForm2->Create( xxx );
CForm1->ShowWindow( SW_SHOW );
CForm2->ShowWindow( SW_HIDE );
2) 切り替える場合は、CViewBaseのOnMenuIDにて、
CForm1->ShowWindow( SW_HIDE );
CForm2->ShowWindow( SW_HIDE );
CForm1/2->ShowWindow( SW_SHOW );
として、動的にCFormViewを切り替えたいのですが、
OnCreate内の、CForm1/2→Create( xxx );にて、
'Create' : protected メンバ (クラス 'CFormView' で宣言されている)にアクセスできません。
のエラーが出ます。
お聞きしたいことは、
1) そもそも、CFormViewを動的に切り替える場合、私のフローはあっていますでしょうか?
2) もしあっているのでしたら、このprotectedを回避する別の方法はありますでしょうか?
よろしくお願いします。
動作は保障しませんが、参考です。
使い方
SwitchView( RUNTIME_CLASS(CFormView1) );
BOOL CMainFrame::SwitchView(CRuntimeClass *pRuntime)
{
CDocument *pDoc;
CView *pOldView, *pNewView;
CCreateContext context;
//現在の表示View
pOldView = GetActiveView();
if ( !pOldView )
return FALSE;
if ( pOldView->IsKindOf(pRuntime) )
return TRUE; //Viewは既に表示中
//ドキュメントを取得
pDoc = GetActiveDocument();
if ( !pDoc )
return FALSE;
//新規View作成
context.m_pNewViewClass = pRuntime;
context.m_pCurrentDoc = pDoc;
pNewView = STATIC_DOWNCAST(CView, CreateView(&context));
if ( !pNewView )
return FALSE;
pNewView->ShowWindow(SW_SHOW);
pNewView->OnInitialUpdate();
SetActiveView(pNewView);
RecalcLayout();
pOldView->DestroyWindow();
return TRUE;
}
>Q様
返信が遅くなりまして申し訳ありません。
やりたいことが無事にできました。
ありがとうございました。