メモ帳などでファイルを開くときに表示されるダイアログがあります。 ファイルを開く処理を安全に行う方法の1つとしてダイアログで選択させます。 そして、どのアプリケーションも同じダイアログを表示してファイルを開きます。 この共通のダイアログのことをコモン・ダイアログと呼びます。 (下図を参考) 上記のようなファイルを開くコモン・ダイアログの表示方法を紹介します。 このダイアログは GetOpenFileName 関数を呼び出すだけで使い方は簡単です。 しかし、OPENFILENAME 構造体のセット情報が複雑です。 詳しくは次のサイトを参考にして下さい。 (1)OPENFILENAME Structure (Windows) (2)OPENFILENAME構造体 (3)OPENFILENAME構造体メモ (4)OPENFILENAME (5)ファイル選択 上記のサイトを参考にして OPENFILENAME 構造体をセットします。 ここで一般的な[ファイルを開く]ダイアログの具体的なソースを紹介します。 // [ファイルを開く]ダイアログ static VOID funcFileOpen( HWND hWnd ) { static OPENFILENAME ofn; static TCHAR szPath[ MAX_PATH ]; static TCHAR szFile[ MAX_PATH ]; if ( szPath[0] == TEXT('\0') ){ GetCurrentDirectory( MAX_PATH, szPath ); } if ( ofn.lStructSize == 0 ){ ofn.lStructSize = sizeof(OPENFILENAME); ofn.hwndOwner = hWnd; ofn.lpstrInitialDir = szPath; // 初期フォルダ位置 ofn.lpstrFile = szFile; // 選択ファイル格納 ofn.nMaxFile = MAX_PATH; ofn.lpstrFilter = TEXT("MP3/M3Uファイル(*.mp3,*.m3u)\0*.mp3;*.m3u\0") TEXT("MP3ファイル(*.mp3)\0*.mp3\0") TEXT("M3Uファイル(*.m3u)\0*.m3u\0") TEXT("すべてのファイル(*.*)\0*.*\0"); ofn.lpstrTitle = TEXT("音楽ファイルを選択します。"); ofn.Flags = OFN_FILEMUSTEXIST; } if ( GetOpenFileName(&ofn) ){ MessageBox( hWnd, szFile, TEXT("ファイルを開く"), MB_OK ); } } // 解説 szPath には、初期フォルダのフルパス名が格納されます。 szFile には、選択ファイルのフルパス名が格納されます。 ただし、ダイアログでキャンセルを選択すると szFile に選択ファイル名は格納されません。 ファイルを選択して[開く(O)]ボタンが押されたときに初めて szFile にファイル名が格納されます。 // その他 OPENFILENAME 構造体の lpstrTitle メンバにダイアログのタイトルを設定できます。 今回は[音楽ファイルを選択します。]という文字列をセットしました。 特に設定しない場合は NULL ポインタをセットします。 また、OPENFILENAME 構造体の lpstrFilter メンバに選択するファイルの種類を設定できます。 こちらの文字列設定は少々複雑で NULL 文字(\0)を境に表示文字列とワイルドカード文字列をペアでセットします。 例えとしてテキストファイルならば、表示文字列に[テキスト文書(*.txt)]、ワイルドカード文字列は[*.txt]です。 この場合は[テキスト文書(*.txt)\0*.txt\0]という文字列をセットします。 基本形式は[表示文字列\0ワイルドカード文字列\0]という文字列です。 さらにワイルドカード文字列に複数セットするには、コロン文字(;)で区切ることで記述できます。 つまり、*.wmv *.avi *.mov *.mpg *.rm の5つの動画ファイルをまとめて表示させたい場合は、 ワイルドカード文字列に[*.wmv;*.avi;*.mov;*.mpg;*.rm]という文字列を指定します。 よって、セット文字列は[動画ファイル(*.wmv,*.avi,*.mov,*.mpg,*.rm)\0*.wmv;*.avi;*.mov;*.mpg;*.rm\0]となります。 // 関連記事 [ファイルを開く]ダイアログ [名前を付けて保存]ダイアログ
最新の画像[もっと見る]
※コメント投稿者のブログIDはブログ作成者のみに通知されます