次の要件を備えたMFCSDI(シングルドキュメントインターフェイス)アプリケーションを構築しようとしています。
一度に1つのドキュメントのみを表示します。
ファイルを開くダイアログから選択したファイルタイプに基づいて、さまざまなビューをサポートします。たとえば、*。txtファイルを選択した場合はMyCViewTextを表示し、*。jpgファイルを選択した場合はMyCViewImageを表示します。
ファイル拡張子ファイルを開くダイアログのカスタムリストを表示します。たとえば、次のようなカスタムダイアログとフィルタを使用します。
CFileDialog *dlg = new CFileDialog(TRUE, NULL, NULL, NULL, L"Text Files (*.txt)|*.txt|" L"JPEG Files (*.jpg)|*.jpg||");
しかし、私には2つの問題があります。
まず、[ファイル]->[開く]ダイアログのファイル拡張子フィルターをどこに挿入するかわかりません。CWinApp::OnFileOpen()
カスタムでオーバーライドすると、呼び出しの呼び出しやドキュメントテンプレートのCViewの初期化CFileDialog
など、SDIが提供する舞台裏の動作がすべて失われます。最初のファイル拡張子フィルターなしで2番目のファイルを開くダイアログが表示されるため、オーバーライドCDocument::OnDocumentOpen()
を呼び出すことができません。CWinApp::OnFileOpen()
次に、ファイルを開くダイアログからファイルを選択した後、ビュートグルコードをどこに挿入するかわかりません。ドキュメントテンプレートは次のように設定されます。
pDocTemplate = new CSingleDocTemplate(
IDR_MAINFRAME,
RUNTIME_CLASS(CMyAppDoc),
RUNTIME_CLASS(CMainFrame),
RUNTIME_CLASS(CMyCView));
ドキュメントテンプレートビューRUNTIME_CLASS(CMyCView)をオーバーライドして切り替えたいようですがCWinApp::OnFileOpen()
、これが可能かどうかはわかりません。
MFC SDIは私の3つの要件にぴったりではありませんか?代わりにMFCMDIアプリケーションを使用する必要がありますか?どういうわけかMDIを使用する必要がある場合、常に1つのドキュメントのみをロードして表示するように制限するにはどうすればよいですか?
どんな助けでも大歓迎です。