プログラミングのメモ帳

日々のプログラミングで気づいた点や小技(Tips)などを紹介します。(Windows XP/Vista、VC2008)

[名前を付けて保存]ダイアログ

2010年08月18日 23時26分00秒 | ダイアログ関連
メモ帳などでファイルを保存するときに表示されるダイアログがあります。
ファイルを保存する処理を安全に行う方法の1つとしてダイアログで入力します。
そして、どのアプリケーションも同じダイアログを表示してファイルを保存します。
この共通のダイアログのことをコモン・ダイアログと呼びます。
(下図を参考)



上記のようなファイルを保存するコモン・ダイアログの表示方法を紹介します。
このダイアログは GetSaveFileName 関数を呼び出すだけで使い方は簡単です。
しかし、OPENFILENAME 構造体のセット情報が複雑です。
詳しくは次のサイトを参考にして下さい。

(1)OPENFILENAME Structure (Windows)
(2)OPENFILENAME構造体
(3)OPENFILENAME構造体メモ
(4)OPENFILENAME
(5)ファイル選択

上記のサイトを参考にして OPENFILENAME 構造体をセットします。
ここで一般的な[名前を付けて保存]ダイアログの具体的なソースを紹介します。

// [名前を付けて保存]ダイアログ
static VOID funcFileSave( 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.lpstrDefExt         = TEXT(".m3u");
        ofn.lpstrFilter         = TEXT("M3Uファイル(*.m3u)\0*.m3u\0");
        ofn.lpstrTitle          = TEXT("音楽ファイルを保存します。");
        ofn.Flags               = OFN_FILEMUSTEXIST | OFN_OVERWRITEPROMPT;
    }
    if ( GetSaveFileName(&ofn) ){
        MessageBox( hWnd, szFile, TEXT("ファイル名を付けて保存"), MB_OK );
    }
}

// 解説
szPath には、初期フォルダのフルパス名が格納されます。
szFile には、保存ファイルのフルパス名が格納されます。
ただし、ダイアログでキャンセルを選択すると szFile に保存ファイル名は格納されません。
ファイルを選択して[保存(S)]ボタンが押されたときに初めて 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]となります。

// 関連記事
[ファイルを開く]ダイアログ
[名前を付けて保存]ダイアログ
『ソフトウェア』 ジャンルのランキング
コメント   この記事についてブログを書く
この記事をはてなブックマークに追加
« [ファイルを開く]ダイアログ | トップ | メモリのポインタからハンド... »
最近の画像もっと見る

コメントを投稿


コメント利用規約に同意の上コメント投稿を行ってください。

数字4桁を入力し、投稿ボタンを押してください。

あわせて読む

トラックバック

この記事のトラックバック  Ping-URL
ブログ作成者から承認されるまでトラックバックは反映されません。