• 締切済み

コールバック関数が動きません。【音処理】

当方、音に関するプログラミングをしています。 その中で、解決できない問題が発生しましたので、ご助言・ご協力頂ければ、と思い質問させていただきます。 尚、ソフトは、Microsoft Visual C++ 2010 Express を使用しております。 言語は、C/C++です。 作成したのは、音を再生する、というだけのプログラムです。 初めに、Win32プロジェクトを使い、一部、次のようにプログラムを作成しました。 ~~~~~~ HWND hWnd=CreateWindow(~) ~~仮の適当なウインドウを作成する~~ ~~~~~ MMRESULT ret = waveOutOpen( ~~音をオープンする処理~~ &m_hWaveOut, uDevID, &m_wfxWaveForm, (DWORD)hWnd, 0, CALLBACK_WINDOW); } ~~~~~ LRESULT CALLBACK WndProc(HWND hWnd, UINT message, WPARAM wParam, LPARAM lParam) { ~~ 再生に関する処理 ~~ } 音データは大きいので、分割して再生し、一つの分割データが再生し終わると、WndProcが呼ばれて 次の再生データを入れ… というような処理です。 大事なのは、コールバック関数を使っているところです。 このプログラムは無事動きました。 しかし、ここから問題が起きました。 ちゃんとしたGUIを実装する為にWindowsフォームアプリケーション、にてプログラムを作成し直した場合、 なぜかコールバック関数の部分だけが動かなくなってしまうのです。 他の部分は問題なく、動きます。 ウインドウから送られてくるメッセージが「Windowsフォームアプリケーション」の場合だけ 違ったりするのでしょうか? 何かわかる方いらっしゃいましたら、ご助言・ご協力お願いいたします。

みんなの回答

noname#137556
noname#137556
回答No.2

ウィンドウメッセージを使わずに, コールバック関数を直接呼んでもらったらどうでしょうか? fdwOpen に CALLBACK_FUNCTION を指定。 dwCallback にコールバック関数(waveOutProc)を渡す。 http://msdn.microsoft.com/ja-jp/library/cc428823.aspx http://msdn.microsoft.com/ja-jp/library/cc428826.aspx

すると、全ての回答が全文表示されます。
回答No.1

>ちゃんとしたGUIを実装する為にWindowsフォームアプリケーション、にてプログラムを作成し直した場合、 Windowsフォームアプリケーションの場合、ウィンドゥプローシジャ関数はWndProcではありません。 フォームが作成されたイベントをキャッチし、そこでデフォルトのWndProc関数のポインタを取得、WNdProc関数の差し替え、差し替えたWndProc関数から元のWndProc関数を呼ぶ、などの処理が必要になるでしょう。 DefWndProcメソッド、WndProcメソッドのヘルプを参照して下さい。

すると、全ての回答が全文表示されます。