CFileDialog クラス
ファイルを開く操作または保存する操作に使用されるコモン ダイアログ ボックスをカプセル化します。
class CFileDialog : public CCommonDialog
メンバー
パブリック コンストラクター
名前 |
説明 |
---|---|
CFileDialog オブジェクトを構築します。 |
パブリック メソッド
名前 |
説明 |
---|---|
ダイアログにチェック ボタンを追加します。 |
|
ダイアログにコンボ ボックスを追加します。 |
|
ダイアログ ボックスのコンテナー コントロールに項目を追加します。 |
|
ダイアログ ボックスにエディット ボックスを追加します。 |
|
ダイアログにメニューを追加します。 |
|
オーバーロードされます。ユーザーが項目を開いたり保存したりするために使用できる場所の一覧に、フォルダーを追加します。 |
|
ダイアログにボタンを追加します。 |
|
オプション ボタン (ラジオ ボタンとも呼びます) のグループをダイアログ ボックスに追加します。 |
|
ダイアログに区切り記号を追加します。 |
|
ダイアログにテキスト コンテンツを追加します。 |
|
m_ofn メンバー変数に格納されているパラメーターとフラグに合わせて、CFileDialog を更新します。 |
|
ダイアログ ボックスを表示し、ユーザーが選択を行えるようにします。 |
|
ダイアログの [開く] または [保存] のボタンのドロップダウン リストを有効にします。 |
|
ダイアログのビジュアル グループに対する要素の追加を停止します。 |
|
ダイアログのチェック ボタン (チェック ボックス) の現在の状態を取得します。 |
|
ダイアログのコンテナー コントロール内にある項目の現在の状態を取得します。 |
|
指定されたコントロールの現在の表示状態および有効状態を取得します。 |
|
エディット ボックス コントロールの現在のテキストを取得します。 |
|
選択されたファイルの拡張子を返します。 |
|
選択されたファイルの名前を返します。 |
|
選択されたファイルのタイトルを返します。 |
|
エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスで現在開かれているフォルダーまたはディレクトリのパスを取得します。 |
|
カスタマイズされた CFileDialog オブジェクトに対応する内部 COM オブジェクトを取得します。 |
|
[ファイルを開く] ダイアログ ボックスとして使用されている CFileDialog に対応する内部 COM オブジェクトを取得します。 |
|
[ファイル名を付けて保存] ダイアログ ボックスとして使用されている CFileDialog に対応する内部 COM オブジェクトを取得します。 |
|
選択されている次のファイルの完全パス名を返します。 |
|
CFileDialog オブジェクトの OPENFILENAME 構造体を取得します。 |
|
選択されたファイルの完全パス名を返します。 |
|
選択されたファイルが読み取り専用かどうかを返します。 |
|
ダイアログでユーザーが選択した内容を取得します。 |
|
複数選択が可能なダイアログでユーザーが選択した内容を取得します。 |
|
ダイアログ内の指定されたコンテナー コントロールから特定の項目を取得します。 |
|
ファイル名リストの最初の要素の位置を返します。 |
|
エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスの指定コントロールを非表示にします。 |
|
現在のダイアログ ボックスがフォルダー ピッカー モードかどうかを判断します。 |
|
他の追加されたコントロールに比べて目立つように、コントロールをダイアログに配置します。 |
|
ダイアログのコンテナー コントロールから項目を削除します。 |
|
ダイアログ内のチェック ボタン (チェック ボックス) の現在の状態を設定します。 |
|
ダイアログのコンテナー コントロール内にある項目の現在の状態を設定します。 |
|
コントロール項目のテキストを設定します。たとえば、オプション ボタンやメニュー内の項目に付随するテキストです。 |
|
ボタンのテキストやエディット ボックスのラベルなどのコントロールに関連付けられているテキストを設定します。 |
|
指定されたコントロールの現在の表示状態および有効状態を設定します。 |
|
エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスの指定コントロールに表示するテキストを設定します。 |
|
エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスで既定で使用するファイル拡張子を設定します。 |
|
エディット ボックス コントロールの現在のテキストを設定します。 |
|
保存する項目に対して使用される既定値を定義するプロパティ ストアを提供します。 |
|
ダイアログにあるオプション ボタン グループまたはコンボ ボックスの特定の項目の選択状態を設定します。 |
|
CFileDialog オブジェクトのダイアログ ボックス テンプレートを設定します。 |
|
ダイアログ内のビジュアル グループを宣言します。以降に "add" メソッドを呼び出すことで、それらの要素をこのグループに追加します。 |
|
ファイル ダイアログ ボックスの現在の状態に合わせて、m_ofn メンバー変数に格納されているデータを更新します。 |
プロテクト メソッド
名前 |
説明 |
---|---|
ボタンがクリックされたときに呼び出されます。 |
|
チェック ボックスがオンまたはオフにされたときに呼び出されます。 |
|
コントロールがアクティブになるときに呼び出されます。 |
|
WM_NOTIFY CDN_SELCHANGE メッセージを処理します。 |
|
ダイアログ ボックスに入力されたファイル名を検証します。 |
|
WM_NOTIFY CDN_FOLDERCHANGE メッセージを処理します。 |
|
WM_NOTIFY CDN_INITDONE メッセージを処理します。 |
|
コンテナー項目が選択されたときに呼び出されます。 |
|
ファイルの選択が変更されたときにカスタム アクションを実行できます。 |
|
共有違反を処理します。 |
|
WM_NOTIFY CDN_TYPECHANGE メッセージを処理します。 |
パブリック データ メンバー
名前 |
説明 |
---|---|
Windows の OPENFILENAME 構造体です。ファイル操作用のダイアログ ボックスの基本パラメーターにアクセスできるようにします。 |
解説
コモン ダイアログ ボックスを使用すると、[ファイルを開く] や [名前を付けて保存] などのファイルの選択ダイアログ ボックスを、Windows の標準に沿った方法で実装できます。
用意されているコンストラクターでそのまま CFileDialog を使用することも、CFileDialog から独自のダイアログ ボックス クラスを派生させて、要件に応じたコンストラクターを記述することもできます。どちらの場合も、これらのダイアログ ボックスは CCommonDialog クラスから派生しているため、標準の MFC のダイアログ ボックスと同様の動作をします。CFileDialog は、Windows に含まれている COMMDLG.DLL ファイルを使用します。
Windows Vista の CFileDialog の外観と機能は、以前のバージョンの Windows から変更されています。既定の CFileDialog は、コードを変更しなくても、プログラムが Windows Vista でコンパイルおよび実行されると、自動的に新しい Windows Vista スタイルを使用するようになっています。この自動更新機能を手動でオーバーライドする場合は、コンストラクターで bVistaStyle パラメーターを使用します。この自動更新機能が適用されないのは、カスタマイズしたダイアログ ボックスです。カスタマイズしたダイアログ ボックスは、新しいスタイルに変換されません。コンストラクターの詳細については、「CFileDialog::CFileDialog」を参照してください。
[!メモ]
Windows Vista では、CFileDialog を使用する場合のコントロール ID のシステムが以前のバージョンの Windows から変更されています。以前のバージョンの Windows からプロジェクトを移植するには、CFileDialog コントロールへのすべての参照をまず更新する必要があります。
CFileDialog のいくつかのメソッドは、Windows Vista ではサポートされません。メソッドがサポートされるかどうかについては、それぞれのメソッドのトピックを参照してください。さらに、Windows Vista では、以下の継承された関数はサポートされません。
CFileDialog クラスのウィンドウ メッセージは、使用しているオペレーティング システムによって異なります。たとえば、Windows XP では、CFileDialog クラスに対して CDialog::OnCancel と CDialog::OnOK はサポートされません。 一方、Windows Vista ではこれらがサポートされます。とそれぞれ異なる順序生成されるメッセージの詳細については、CFileDialogサンプル: ログのEventの順序を参照してください。
CFileDialog オブジェクトを使うには、まず CFileDialog コンストラクターを使ってオブジェクトを作成します。ダイアログ ボックスが構築されたら、CFileDialog::m_ofn 構造体の値を設定または変更して、ダイアログ ボックスのコントロールの値や状態を初期化できます。m_ofn 構造体の型は、OPENFILENAME です。詳細については、Windows SDK の OPENFILENAME 構造体を参照してください。
ダイアログ ボックスのコントロールを初期化したら、ユーザーがパスとファイル名を入力できるように、CFileDialog::DoModal メソッドを呼び出してダイアログ ボックスを表示します。DoModal は、ユーザーが [OK] (IDOK) ボタンと [キャンセル] (IDCANCEL) ボタンのどちらをクリックしたかを返します。DoModal が IDOK を返したときは、CFileDialog のパブリック メンバー関数を使用して、入力された情報を取得できます。
[!メモ]
Windows Vista では、IFileDialog::SetFileTypes を複数回呼び出すとエラーが発生します。Windows Vista では、CFileDialog のどのインスタンスでも、SetFileTypes の 2 回目の呼び出しからは E_UNEXPECTED が返されます。CFileDialog の一部のメソッド関数は、SetFileTypes を呼び出します。たとえば、CFileDialog の同じインスタンスで CFileDialog::DoModal を 2 回呼び出すと、ASSERT が生成されます。
CFileDialog には、共有違反、ファイル名の検証、およびリスト ボックスの変更通知に対してカスタム処理を実行できる、いくつかのプロテクト メンバーが含まれています。これらのプロテクト メンバーはコールバック関数ですが、通常は既定の処理が自動的に実行されるため、ほとんどのアプリケーションでは使用する必要がありません。これらは標準の仮想関数なので、これらの関数に対するメッセージ マップ エントリも必要ありません。
Windows の CommDlgExtendedError 関数を使用すると、ダイアログ ボックスの初期化中にエラーが発生したかどうかを確認し、そのエラーについての情報を取得できます。
CFileDialog オブジェクトの破棄は自動的に処理されます。CDialog::EndDialog を呼び出す必要はありません。
ユーザーが複数のファイルを選択できるようにするには、DoModal を呼び出す前に OFN_ALLOWMULTISELECT フラグを設定します。この場合、複数のファイル名のリストを格納できるバッファーを指定する必要があります。そのためには、CFileDialog を構築した後、DoModal を呼び出す前に、独自に割り当てたバッファーへのポインターを m_ofn.lpstrFile に設定します。
また、m_ofn.lpstrFileが指すバッファーの文字数を使用して m_ofn.nMaxFile を設定する必要があります。選択するファイルの最大数を n に設定するとしたら、必要なバッファー サイズは n * (_MAX_PATH + 1) + 1 になります。バッファーに返される最初の項目は、ファイルが選択したフォルダーのパスです。Windows Vistaの式のダイアログ ボックスでは、ディレクトリ、およびファイル名の文字列は、最後のファイル名後に追加のnull文字が、nullで終わります。この形式は空間を含む長いファイル名を返すことをエクスプローラー スタイルのダイアログ ボックスが表示されます。旧式のダイアログ ボックスでは、ディレクトリ、およびファイル名の文字列が空白で区切られて、関数は空白とファイル名には短いファイル名を使用します。
次の例は、複数のファイル名を取得し、一覧にバッファーを使用する方法を示します。
#define MAX_CFileDialog_FILE_COUNT 99
#define FILE_LIST_BUFFER_SIZE ((MAX_CFileDialog_FILE_COUNT * (MAX_PATH + 1)) + 1)
CString fileName;
wchar_t* p = fileName.GetBuffer( FILE_LIST_BUFFER_SIZE );
CFileDialog dlgFile(TRUE);
OPENFILENAME& ofn = dlgFile.GetOFN( );
ofn.Flags |= OFN_ALLOWMULTISELECT;
ofn.lpstrFile = p;
ofn.nMaxFile = FILE_LIST_BUFFER_SIZE;
dlgFile.DoModal();
fileName.ReleaseBuffer();
wchar_t* pBufEnd = p + FILE_LIST_BUFFER_SIZE - 2;
wchar_t* start = p;
while( ( p < pBufEnd ) && ( *p ) )
p++;
if( p > start )
{
_tprintf(_T("Path to folder where files were selected: %s\r\n\r\n"), start );
p++;
int fileCount = 1;
while( ( p < pBufEnd ) && ( *p ) )
{
start = p;
while( ( p < pBufEnd ) && ( *p ) )
p++;
if( p > start )
_tprintf(_T("%2d. %s\r\n"), fileCount, start );
p++;
fileCount++;
}
}
ユーザーが複数のファイル名を選択するのに応じてバッファー サイズを変更するには、CFileDialog から新しいクラスを派生させ、CFileDialog::OnFileNameChange メソッドをオーバーライドする必要があります。
CFileDialog から新しいクラスを派生するとき、メッセージ マップを使用してメッセージを処理できます。既定のメッセージ処理を拡張するには、CFileDialog から派生クラスを作成し、そのクラスにメッセージ マップを追加し、新しいメッセージを処理するためのメンバー関数を用意します。ダイアログ ボックスをカスタマイズするために、フック関数を用意する必要はありません。
ダイアログ ボックスをカスタマイズするには、CFileDialog からクラスを派生させ、独自のダイアログ ボックス テンプレートを作成します。さらに、拡張コントロールからの通知メッセージを処理するメッセージ マップを追加します。処理されないメッセージは基本クラスに渡します。フック関数をカスタマイズする必要はありません。
Windows Vista スタイルの CFileDialog を使用する場合、メッセージ マップとダイアログ ボックス テンプレートは使用できません。代わりに、同様の機能を持つ COM インターフェイスを使用する必要があります。
CFileDialog の使用方法の詳細については、「コモン ダイアログ クラス」を参照してください。
継承階層
CFileDialog
必要条件
**ヘッダー:**afxdlgs.h