CFormViewの動的切り替え – プログラミング – Home

通知
すべてクリア

[解決済] CFormViewの動的切り替え


トモ
 トモ
(@トモ)
ゲスト
結合: 23年前
投稿: 65
Topic starter  

現在、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を回避する別の方法はありますでしょうか?

よろしくお願いします。


引用未解決
トピックタグ
Q
 Q
(@Q)
ゲスト
結合: 24年前
投稿: 45
 

動作は保障しませんが、参考です。

使い方
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;
}


返信引用
トモ
 トモ
(@トモ)
ゲスト
結合: 23年前
投稿: 65
Topic starter  

>Q様

返信が遅くなりまして申し訳ありません。
やりたいことが無事にできました。
ありがとうございました。


返信引用

返信する

投稿者名

投稿者メールアドレス

タイトル *

プレビュー 0リビジョン 保存しました
共有:
タイトルとURLをコピーしました