CFileDialog クラス

更新 : 2007 年 11 月

ファイル操作用の Windows のコモン ダイアログ ボックスをカプセル化します。

class CFileDialog : public CCommonDialog

解説

ファイル操作用のコモン ダイアログ ボックスは、[ファイルを開く]、[ファイル名を付けて保存] などのファイルを選択するためのダイアログ ボックスを Windows の標準に準拠した形式で簡単に実装できるように用意されています。

用意されているコンストラクタを使ってそのまま CFileDialog を使うことも、CFileDialog から独自の派生クラスを生成し、要件に合わせてコンストラクタを記述することもできます。いずれの場合も、これらのダイアログ ボックスは CCommonDialog クラス から派生したものなので、標準の MFC のダイアログ ボックスと同等の動作をします。

Windows Vista の CFileDialog の外観と機能は、以前のバージョンの Windows から変更されています。既定の CFileDialog は、プログラムが Windows Vista でコンパイル、実行される場合に、新しい Windows Vista スタイルを自動的に使用するようになっているので、コードの変更は必要ありません。この自動更新機能を手動でオーバーライドする場合は、コンストラクタで bVistaStyle パラメータを使用します。この自動更新機能が適用されないのは、カスタマイズしたダイアログ ボックスです。カスタマイズしたダイアログ ボックスは、新しいスタイルに変換されません。コンストラクタの詳細については、「CFileDialog::CFileDialog」を参照してください。

dk77e5e7.alert_note(ja-jp,VS.90).gifメモ :

Windows Vista では、CFileDialog を使用する場合のコントロール ID のシステムが以前のバージョンの Windows から変更されています。以前のバージョンの Windows からプロジェクトを移植するには、CFileDialog コントロールへのすべての参照をまず更新する必要があります。

CFileDialog のいくつかのメソッドは、Windows Vista ではサポートされていません。メソッドがサポートされているかどうかについては、それぞれのメソッドのトピックを参照してください。さらに、Windows Vista では、以下の継承された関数はサポートされていません。

CFileDialog クラスに対応するウィンドウ メッセージは、オペレーティング システムによって異なります。たとえば、Windows XP では、CFileDialog クラスに対して CDialog::OnCancelCDialog::OnOK はサポートされていません。一方、Windows Vista ではサポートされています。生成される各種のメッセージとそれぞれの生成順序の詳細については、「CFileDialog サンプル : イベント順序の記録」を参照してください。

CFileDialog オブジェクトを使うには、まず CFileDialog コンストラクタを使ってオブジェクトを作成します。ダイアログ ボックスが構築されたら、CFileDialog::m_ofn    構造体の値を設定するか変更し、そのダイアログ ボックスのコントロールの値や状態を初期化できます。m_ofn 構造体の型は、OPENFILENAME です。詳細については、Windows SDK の OPENFILENAME 構造体を参照してください。

ダイアログ ボックスのコントロールを初期化した後は、CFileDialog::DoModal メソッドを呼び出して、ユーザーがパスとファイルを入力するためのダイアログ ボックスを表示します。DoModal は、ユーザーが [OK] をクリックした (IDOK) か [キャンセル] をクリックした (IDCANCEL) かを返します。

DoModal が IDOK を返したときは、CFileDialog のパブリックなメンバ関数を使って、入力された情報を取得できます。

CFileDialog にはプロテクト メンバがいくつかあり、これらのメンバを使うと、共有違反、ファイル名の検証、リスト ボックスの変更通知などを独自に処理できます。しかし、このような操作については既定の処理が自動的に行われるため、これらのプロテクト メンバは、通常のアプリケーションでは使用する必要がないコールバック関数です。これらの関数のメッセージ マップ エントリも標準の仮想関数なので必要ではありません。

ダイアログ ボックスの初期化中にエラーが発生したかどうかを確認し、そのエラーについての情報を得るために、Windows の CommDlgExtendedError 関数を使用できます。

CFileDialog オブジェクトの破棄は自動的に処理されます。CDialog::EndDialog を呼び出す必要はありません。

ユーザーが複数のファイルを選択できるようにするには、DoModal を呼び出す前に OFN_ALLOWMULTISELECT フラグを設定します。この場合、複数のファイル名のリストを格納できるバッファを指定する必要があります。そのためにはまず、CFileDialog のコンストラクタを呼び出し、m_ofn.lpstrFile に用意したバッファを指すポインタを設定してから、DoModal を呼び出します。

ユーザーが OFN_ALLOWMULTISELECT を格納するために割り当てるバッファの大きさを 2048 より大きくすることはできません。これを超えると、すべてが破壊されます (2048 は最大サイズです)。

さらに、m_ofn.lpstrFile が指すバッファの文字数を m_ofn.nMaxFile に設定する必要があります。選択するファイルの最大数を n に設定した場合、必要なバッファ サイズは n*(_MAX_PATH + 1) + 1 になります。次に例を示します。

CFileDialog dlgFile(TRUE);
CString fileName;
const int c_cMaxFiles = 100;
const int c_cbBuffSize = (c_cMaxFiles * (MAX_PATH + 1)) + 1;
dlgFile.GetOFN().lpstrFile = fileName.GetBuffer(c_cbBuffSize);
dlgFile.GetOFN().nMaxFile = c_cMaxFiles;

dlgFile.DoModal();
fileName.ReleaseBuffer();

CFileDialog は、Windows に用意されている COMMDLG.DLL ファイルを使用します。

CFileDialog から新しいクラスを派生するとき、メッセージ マップを使用してメッセージを処理できます。既定のメッセージ処理を拡張するには、CWnd から派生クラスを作成し、そのクラスにメッセージ マップを追加し、新しいメッセージを処理するためのメンバ関数を用意します。ダイアログ ボックスをカスタマイズするために、フック関数を用意する必要はありません。

ダイアログ ボックスをカスタマイズするには、CFileDialog からクラスを派生し、独自のダイアログ テンプレートを作成します。さらに、外部のコントロールからの通知メッセージを処理するためにメッセージ マップを追加します。処理されないメッセージは基本クラスに渡されます。

フック関数のカスタマイズは必要ありません。

Windows Vista スタイルの CFileDialog を使用する場合は、メッセージ マップとダイアログ テンプレートを利用できません。その代わりに、同じような機能を備えた COM インターフェイスを使用する必要があります。

CFileDialog の使い方の詳細については、「コモン ダイアログ クラス」を参照してください。

必要条件

**ヘッダー :**afxdlgs.h

参照

参照

CCommonDialog クラス

階層図

その他の技術情報

CFileDialog のメンバ