S-JIS[2002-07-28]

「ファイルを開く」ダイアログの変更方法

自分で作ったMFCアプリケーションの「ファイルを開く」メニューで出てくるダイアログを変えるには、 CFileDialogを使います。

まず、自分で作ったアプリケーションのCWinAppの派生クラスの中で、 OnOpenFileをオーバーライドします。

ここの例では、CWinAppの派生クラスをCTestAppとしています。
ClassWizardではCTestAppの関数一覧にOnOpenFileが表れないようなので、自分でコーディングします。

CTestApp.h:
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つの文字列が指定されることになるのです。


VC++ページへ戻る / 技術メモへ戻る
メールの送信先:ひしだま