自分で作ったMFCアプリケーションの「ファイルを開く」メニューで出てくるダイアログを変えるには、 CFileDialogを使います。
まず、自分で作ったアプリケーションのCWinAppの派生クラスの中で、 OnOpenFileをオーバーライドします。
ここの例では、CWinAppの派生クラスをCTestAppとしています。
ClassWizardではCTestAppの関数一覧にOnOpenFileが表れないようなので、自分でコーディングします。
class CTestApp : public CWinApp { 〜 //{{AFX_MSG(CTestApp) 〜 //}}AFX_MSG afx_msg void OnFileOpen(); DECLARE_MESSAGE_MAP() 〜 };test.cpp:
〜 BEGIN_MESSAGE_MAP(CTestApp, CWinApp) //{{AFX_MSG_MAP(CTestApp) 〜 //}}AFX_MSG_MAP // 標準のファイル基本ドキュメント コマンド ON_COMMAND(ID_FILE_NEW, CWinApp::OnFileNew) ON_COMMAND(ID_FILE_OPEN, CTestApp::OnFileOpen) //CWinAppからCTestAppに変更 〜 END_MESSAGE_MAP() 〜 void CTestApp::OnFileOpen() { CFileDialog fd( TRUE, //開く "", //デフォルトの拡張子 "", //デフォルトのファイル名 OFN_FILEMUSTEXIST| OFN_HIDEREADONLY| OFN_LONGNAMES, //フラグ "テキスト (*.TXT)|*.TXT|" "ドキュメント (*.DOC)|*.DOC|" "全てのファイル(*.*)|*.*||", //フィルタ NULL //親ウィンドウ ); fd.m_ofn.lpstrInitialDir=(LPCSTR)"C:\\temp"; //初期ディレクトリ if(fd.DoModal()==IDOK){ OpenDocumentFile(fd.GetPathName()); } }
細かい事は例によってヘルプを参照していただくとして。
フィルタは、「名称|ワイルドカード」という形を縦棒で区切って複数記述し、
最後は縦棒を2つ連続して書いて終端を表す、というルールになっています。
上記の例のフィルタの部分には「テキスト」と「ドキュメント」と「全てのファイル」の3つの文字列を、
改行とブランクだけを間に入れて並べています。
(ANSI基準の)C言語においては、文字列と文字列をブランクだけを
はさんで並べると 1つの文字列として連結してくれるので、フィルタの欄には
1つの文字列が指定されることになるのです。