好きな音声ファイルをBGMに出来るように、
ファイルの名前を得るコモンダイアログGetOpenFileNameを使いたいのですが不具合がでてしまいます。
環境は Win7 VC++2010EE DXライブラリVer3.03a です。
下の関数get_music_nameで音声ファイル名を得て、
LoadSoundMem( (音声ファイル名) ) として、
PlaySoundMem で再生するようにしています。
その再生は問題なくできるのですが、このget_music_nameを使った後に
LoadGraph や LoadSoundMem を使ってファイルを読み込んでも、その画像や音声ファイルが使えません(よみこめてない?)。
カレントディレクトリは変わっていないようなのでメモリがぐちゃぐちゃになったのかなぁとは思うのですが・・・
WinAPIについてはあまり知らないのですが、ダイアログを登録していないからなのか?とか、
プロシージャを用意しなきゃいけないのか?と思って調べてみてもよくわかりませんでした・・・
どうすればよいでしょうか?
char* get_music_name(){
OPENFILENAME ofn;
static TCHAR filename_full[MAX_PATH]; // ファイル名(フルパス)を受け取る領域
static TCHAR filename[MAX_PATH]; // ファイル名を受け取る領域
// 構造体に情報をセット
ZeroMemory( &ofn, sizeof(OPENFILENAME) ); // 最初にゼロクリアしておく
ofn.lStructSize = sizeof(OPENFILENAME); // 構造体のサイズ
ofn.hwndOwner = GetMainWindowHandle(); // コモンダイアログの親ウィンドウハンドル
ofn.lpstrFilter = _T("mp3(*.mp3)\0*.mp3\0\0"); // ファイルの種類
ofn.lpstrFile = filename_full; // 選択されたファイル名(フルパス)を受け取る変数のアドレス
ofn.lpstrFileTitle = filename; // 選択されたファイル名を受け取る変数のアドレス
ofn.nMaxFile = sizeof(filename_full); // lpstrFileに指定した変数のサイズ
ofn.nMaxFileTitle = sizeof(filename); // lpstrFileTitleに指定した変数のサイズ
ofn.Flags = OFN_FILEMUSTEXIST; // フラグ指定
ofn.lpstrTitle = _T("BGMを選択(mp3のみ)"); // コモンダイアログのキャプション
ofn.lpstrDefExt = _T("mp3"); // デフォルトのファイルの種類
// ファイルを開くコモンダイアログを作成
if( !GetOpenFileName( &ofn ) )
{
MessageBox( NULL, _T("ファイル読み込み中止"), _T("ファイル読み込み中止"), MB_OK );
SendMessage( NULL, WM_CLOSE, 0, 0 );
return NULL;
}
return filename_full;
}
※このコードは下のサイトのものをもじったものです
http: //w w w.geocities.jp/ky_webid/win32c/055.html