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