こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

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

当方、音に関するプログラミングをしています。
その中で、解決できない問題が発生しましたので、ご助言・ご協力頂ければ、と思い質問させていただきます。

尚、ソフトは、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フォームアプリケーション」の場合だけ
違ったりするのでしょうか?

何かわかる方いらっしゃいましたら、ご助言・ご協力お願いいたします。

投稿日時 - 2011-01-14 16:44:06

QNo.6447403

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

0人が「このQ&Aが役に立った」と投票しています

回答(2)

ウィンドウメッセージを使わずに,
コールバック関数を直接呼んでもらったらどうでしょうか?

fdwOpen に CALLBACK_FUNCTION を指定。
dwCallback にコールバック関数(waveOutProc)を渡す。

http://msdn.microsoft.com/ja-jp/library/cc428823.aspx
http://msdn.microsoft.com/ja-jp/library/cc428826.aspx

投稿日時 - 2011-01-14 23:16:30

ANo.1

>ちゃんとしたGUIを実装する為にWindowsフォームアプリケーション、にてプログラムを作成し直した場合、

Windowsフォームアプリケーションの場合、ウィンドゥプローシジャ関数はWndProcではありません。

フォームが作成されたイベントをキャッチし、そこでデフォルトのWndProc関数のポインタを取得、WNdProc関数の差し替え、差し替えたWndProc関数から元のWndProc関数を呼ぶ、などの処理が必要になるでしょう。

DefWndProcメソッド、WndProcメソッドのヘルプを参照して下さい。

投稿日時 - 2011-01-14 17:03:52