プログラミングのメモ帳(C/C++/HSP)

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

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

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]となります。

// 関連記事
[ファイルを開く]ダイアログ
[名前を付けて保存]ダイアログ

コメント    この記事についてブログを書く
  • X
  • Facebookでシェアする
  • はてなブックマークに追加する
  • LINEでシェアする
« [ファイルを開く]ダイアログ | トップ | メモリのポインタからハンド... »
最新の画像もっと見る

コメントを投稿

ダイアログ関連」カテゴリの最新記事