char fileName[MAX_PATH] = "無題.map"; //ファイル名を入れる変数
//「ファイルを保存」ダイアログの設定
OPENFILENAME ofn; //名前をつけて保存ダイアログの設定用構造体
ZeroMemory(&ofn, sizeof(ofn)); //構造体初期化
ofn.lStructSize = sizeof(OPENFILENAME); //構造体のサイズ
ofn.lpstrFilter = TEXT("マップデータ(*.map)\0*.map\0") //─┬ファイルの種類
TEXT("すべてのファイル(*.*)\0*.*\0\0"); //─┘
ofn.lpstrFile = fileName; //ファイル名
ofn.nMaxFile = MAX_PATH; //パスの最大文字数
ofn.Flags = ●●●●●●●●●; //フラグ(同名ファイルが存在したら上書き確認)
ofn.lpstrDefExt = "map"; //デフォルト拡張子
//「ファイルを保存」ダイアログ
BOOL selFile;
selFile = GetSaveFileName(&ofn);
//キャンセルしたら中断
if(selFile == FALSE) return;
これで、よく見る「名前を付けて保存」のダイアログが表示され、fileNameに指定したファイル名が入る。
「ファイルを開く」ダイアログの場合はGetOpenFileName関数を使う。
「フラグ」の部分は
上書き保存するか確認する:OFN_OVERWRITEPROMPT (保存の時はコレ)
存在するファイルしか選べない:OFN_FILEMUSTEXIST (開く時はコレ)
その他たくさん → http://www-higashi.ist.osaka-u.ac.jp/~k-maeda/vcpp/com5-2ofn.html