2011-12-15 25 views
0

MDI MFCアプリケーション内のドキュメントに対して複数のビューを作成したいと考えています。そのためには、私のアプリケーションクラスのInitInstance関数は、コードにMFC MDIアプリケーション内のドキュメントの異なるビュー

m_pMainTemplate = new CMultiDocTemplate(IDR_OpenCVTestTYPE, 
    RUNTIME_CLASS(CMyDoc), 
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame 
    RUNTIME_CLASS(CImageView)); 
if (!m_pMainTemplate) 
    return FALSE; 
AddDocTemplate(m_pMainTemplate); 

m_pHistTemplate = new CMultiDocTemplate(IDR_OpenCVTestTYPE, 
    RUNTIME_CLASS(CMyDoc), 
    RUNTIME_CLASS(CChildFrame), // custom MDI child frame 
    RUNTIME_CLASS(CHistogramView)); 
if (!m_pHistTemplate) 
    return FALSE; 
AddDocTemplate(m_pHistTemplate); 

を以下ました。しかし、私は、アプリケーションを起動したとき、それは二つの文書の中でどの文書、ユーザが選択したい求め続けます。もちろん、それらの文書は同じ種類です。この問題を解決するためのヒントやヒント?

UPDATE:は、私は2番目のビューのために別々のメニューを持つ第二のテンプレートを追加しないでください。この

void CMyApp::OnFileNew() 
{ 
    // TODO: Add your command handler code here 
    m_pMainTemplate->OpenDocumentFile(NULL); 
} 
+1

あなたのケースでは、OnFileNewをオーバーライドするのが正しい方法です。 – zar

答えて

1

ようOnFileNewオーバーライドすることで問題を解決しました。

このMicrosoft KB articleは、1つのドキュメントに複数のビューを作成する方法を示しています。

EDIT:代替ビューが必要な子フレームを開く前に、ドキュメントテンプレートを変更することが可能です。

m_pMainTemplate->m_m_pNewViewClass = RUNTIME_CLASS(CHistogramView); 

あなたは、おそらくテンプレートは、すべての子フレームの開口部のために期待される状態にあることを確認するために、子フレームのいずれかの種類を開く前に、テンプレートのビューを設定する必要があります。

+0

この記事を慎重に読んだら、SDIに気付くでしょう。私はMDIのためです。 –

+0

技術はMDIに適応できます:ユーザーに新しい子フレームを開き、フレーム作成時にビューを置き換えるようにします –

+0

私はMDIでもその方法を考えましたが、なぜビューを切り替えるのですか?実際の要件は、両方のビューも表示することです。 FYI:私はすでに試してみましたが、MDIではうまくいきません。 –

関連する問題