次の方法で共有


CFileDialog クラス

ファイルを開く操作または保存する操作に使用されるコモン ダイアログ ボックスをカプセル化します。

class CFileDialog : public CCommonDialog

メンバー

パブリック コンストラクター

名前

説明

CFileDialog::CFileDialog

CFileDialog オブジェクトを構築します。

パブリック メソッド

名前

説明

CFileDialog::AddCheckButton

ダイアログにチェック ボタンを追加します。

CFileDialog::AddComboBox

ダイアログにコンボ ボックスを追加します。

CFileDialog::AddControlItem

ダイアログ ボックスのコンテナー コントロールに項目を追加します。

CFileDialog::AddEditBox

ダイアログ ボックスにエディット ボックスを追加します。

CFileDialog::AddMenu

ダイアログにメニューを追加します。

CFileDialog::AddPlace

オーバーロードされます。 ユーザーが項目を開いたり保存したりするために使用できる場所の一覧に、フォルダーを追加します。

CFileDialog::AddPushButton

ダイアログにボタンを追加します。

CFileDialog::AddRadioButtonList

オプション ボタン (ラジオ ボタンとも呼びます) のグループをダイアログ ボックスに追加します。

CFileDialog::AddSeparator

ダイアログに区切り記号を追加します。

CFileDialog::AddText

ダイアログにテキスト コンテンツを追加します。

CFileDialog::ApplyOFNToShellDialog

m_ofn メンバー変数に格納されているパラメーターとフラグに合わせて、CFileDialog を更新します。

CFileDialog::DoModal

ダイアログ ボックスを表示し、ユーザーが選択を行えるようにします。

CFileDialog::EnableOpenDropDown

ダイアログの [開く] または [保存] のボタンのドロップダウン リストを有効にします。

CFileDialog::EndVisualGroup

ダイアログのビジュアル グループに対する要素の追加を停止します。

CFileDialog::GetCheckButtonState

ダイアログのチェック ボタン (チェック ボックス) の現在の状態を取得します。

CFileDialog::GetControlItemState

ダイアログのコンテナー コントロール内にある項目の現在の状態を取得します。

CFileDialog::GetControlState

指定されたコントロールの現在の表示状態および有効状態を取得します。

CFileDialog::GetEditBoxText

エディット ボックス コントロールの現在のテキストを取得します。

CFileDialog::GetFileExt

選択されたファイルの拡張子を返します。

CFileDialog::GetFileName

選択されたファイルの名前を返します。

CFileDialog::GetFileTitle

選択されたファイルのタイトルを返します。

CFileDialog::GetFolderPath

エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスで現在開かれているフォルダーまたはディレクトリのパスを取得します。

CFileDialog::GetIFileDialogCustomize

カスタマイズされた CFileDialog オブジェクトに対応する内部 COM オブジェクトを取得します。

CFileDialog::GetIFileOpenDialog

[ファイルを開く] ダイアログ ボックスとして使用されている CFileDialog に対応する内部 COM オブジェクトを取得します。

CFileDialog::GetIFileSaveDialog

[ファイル名を付けて保存] ダイアログ ボックスとして使用されている CFileDialog に対応する内部 COM オブジェクトを取得します。

CFileDialog::GetNextPathName

選択されている次のファイルの完全パス名を返します。

CFileDialog::GetOFN

CFileDialog オブジェクトの OPENFILENAME 構造体を取得します。

CFileDialog::GetPathName

選択されたファイルの完全パス名を返します。

CFileDialog::GetReadOnlyPref

選択されたファイルが読み取り専用かどうかを返します。

CFileDialog::GetResult

ダイアログでユーザーが選択した内容を取得します。

CFileDialog::GetResults

複数選択が可能なダイアログでユーザーが選択した内容を取得します。

CFileDialog::GetSelectedControlItem

ダイアログ内の指定されたコンテナー コントロールから特定の項目を取得します。

CFileDialog::GetStartPosition

ファイル名リストの最初の要素の位置を返します。

CFileDialog::HideControl

エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスの指定コントロールを非表示にします。

CFileDialog::IsPickFoldersMode

現在のダイアログ ボックスがフォルダー ピッカー モードかどうかを判断します。

CFileDialog::MakeProminent

他の追加されたコントロールに比べて目立つように、コントロールをダイアログに配置します。

CFileDialog::RemoveControlItem

ダイアログのコンテナー コントロールから項目を削除します。

CFileDialog::SetCheckButtonState

ダイアログ内のチェック ボタン (チェック ボックス) の現在の状態を設定します。

CFileDialog::SetControlItemState

ダイアログのコンテナー コントロール内にある項目の現在の状態を設定します。

CFileDialog::SetControlItemText

コントロール項目のテキストを設定します。 たとえば、オプション ボタンやメニュー内の項目に付随するテキストです。

CFileDialog::SetControlLabel

ボタンのテキストやエディット ボックスのラベルなどのコントロールに関連付けられているテキストを設定します。

CFileDialog::SetControlState

指定されたコントロールの現在の表示状態および有効状態を設定します。

CFileDialog::SetControlText

エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスの指定コントロールに表示するテキストを設定します。

CFileDialog::SetDefExt

エクスプローラー形式の [ファイルを開く] または [ファイル名を付けて保存] コモン ダイアログ ボックスで既定で使用するファイル拡張子を設定します。

CFileDialog::SetEditBoxText

エディット ボックス コントロールの現在のテキストを設定します。

CFileDialog::SetProperties

保存する項目に対して使用される既定値を定義するプロパティ ストアを提供します。

CFileDialog::SetSelectedControlItem

ダイアログにあるオプション ボタン グループまたはコンボ ボックスの特定の項目の選択状態を設定します。

CFileDialog::SetTemplate

CFileDialog オブジェクトのダイアログ ボックス テンプレートを設定します。

CFileDialog::StartVisualGroup

ダイアログ内のビジュアル グループを宣言します。 以降に "add" メソッドを呼び出すことで、それらの要素をこのグループに追加します。

CFileDialog::UpdateOFNFromShellDialog

ファイル ダイアログ ボックスの現在の状態に合わせて、m_ofn メンバー変数に格納されているデータを更新します。

プロテクト メソッド

名前

説明

CFileDialog::OnButtonClicked

ボタンがクリックされたときに呼び出されます。

CFileDialog::OnCheckButtonToggled

チェック ボックスがオンまたはオフにされたときに呼び出されます。

CFileDialog::OnControlActivating

コントロールがアクティブになるときに呼び出されます。

CFileDialog::OnFileNameChange

WM_NOTIFY CDN_SELCHANGE メッセージを処理します。

CFileDialog::OnFileNameOK

ダイアログ ボックスに入力されたファイル名を検証します。

CFileDialog::OnFolderChange

WM_NOTIFY CDN_FOLDERCHANGE メッセージを処理します。

CFileDialog::OnInitDone

WM_NOTIFY CDN_INITDONE メッセージを処理します。

CFileDialog::OnItemSelected

コンテナー項目が選択されたときに呼び出されます。

CFileDialog::OnLBSelChangedNotify

ファイルの選択が変更されたときにカスタム アクションを実行できます。

CFileDialog::OnShareViolation

共有違反を処理します。

CFileDialog::OnTypeChange

WM_NOTIFY CDN_TYPECHANGE メッセージを処理します。

パブリック データ メンバー

名前

説明

CFileDialog::m_ofn

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::OnCancelCDialog::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 の使用方法の詳細については、「コモン ダイアログ クラス」を参照してください。

継承階層

CObject

CCmdTarget

CWnd

CDialog

CCommonDialog

CFileDialog

必要条件

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

参照

関連項目

CCommonDialog クラス

階層図