プロが教える店舗&オフィスのセキュリティ対策術

ウインドウズでゲームを作ってみたいと思い立ち、1ヶ月ほど細々とプログラミングしている者です。環境はXPSP2、VC++6.0です。
このサイトの方たちには色々教えて頂いております。

今、BGMとしてMID(MIDI)ファイルを使いたいと思って色々やっているのですが、音を出すことが出来ません。
VCで作成したプロジェクトフォルダに、test.midというファイルを入れてあり、test.mid単独では音は鳴ります。
アプリケーションのクライアント領域上で右ボタンを押すと音が鳴ると思っていたのですが、メッセージボックスしか出ませんでした。

#include "windows.h"
#include <mmsystem.h>
#pragma comment(lib, "winmm.lib")

LRESULT CALLBACK WindowProc(HWND hWnd,UINT uMsg,
WPARAM wParam,
LPARAM lParam
)
{
switch(uMsg)
{
case WM_CREATE:
mciSendString("open test.mid type sequencer alias music",NULL,0,NULL);
break;

case WM_DESTROY:
mciSendString("stop music",NULL,0,NULL);
mciSendString("close music",NULL,0,NULL);
PostQuitMessage(0);
return 0;

case WM_KEYUP:
if(wParam==VK_RIGHT)
{
MessageBox(NULL,TEXT("MUSIC"),NULL,MB_OK);
mciSendString("play music", NULL, 0, NULL);
     }
}
return DefWindowProc(hWnd,uMsg,wParam,lParam);
}

WINMAINは別段変わったことはやっておりません。ご存知の方が居ましたら宜しくお願い致します。

A 回答 (3件)

midファイルが「カレントパス」内に入っていないのが原因ではないでしょうか。

ファイルをパス無しで指定した場合、カレントパスが自動的に使われますが、このカレントパスがクセモノで、必ずしも実行ファイルと同じパスであるとは限らないのです。Visual Studioからデバッグモードで実行したり、ショートカットから実行したりすると、カレントパスも変化します。

とりあえず「test.mid」の部分をフルパスにしてトライしてみてください。(例えば「C:\music\test.mid」など)これならカレントパスに影響されず、確実にmidファイルを指定できるので。

これでも音が鳴らなければ別の原因ということになりますが、少なくとも可能性の一つを潰せるので…

この回答への補足

情報有難う御座いました。
保存場所を変えたり色々やってみたのですが、フルパスでもうまくいかない様です。
以前回答下さった方が、私が書いたソースをコピペしたら音が鳴ったとのことなので、環境に依存しているとは思うのですが…。
うーん、VCは使う人を選ぶのか?

補足日時:2008/06/03 00:34
    • good
    • 0
この回答へのお礼

大分長く引っ張ってしまいました。
ひとまず終了させて頂きます。
アドバイスを下さったかた、有難う御座いました。

お礼日時:2008/06/22 01:43

試しにコンパイルしてみましたがメッセージボックスの「OK」を押して消した後にちゃんと音が鳴りました。

この回答への補足

確認して頂き、有難う御座いました。
そうですか…宜しければ、動作環境を教えて頂けませんでしょうか?

補足日時:2008/05/31 11:14
    • good
    • 0

> アプリケーションのクライアント領域上で右ボタンを押すと


の『右ボタン』とは マウスの右ボタンなのでしょうか

お示しのコードでは キーボードの『右矢印』キーを離した際の処理内容です

マウスの右ボタンなら
WM_RBUTTONDOWN/WM_RBUTTONUPメッセージで処理しないといけにかと思います

この回答への補足

すみません。表現が不適切でした。
キーボードの右矢印キーです。
右矢印キーを押すと、メッセージボックス(MUSIC)は出るのですが、
音が出ないんです。

補足日時:2008/05/31 01:33
    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!