midiInOpenのdwFlagsパラメータ

公開:2010-12-18 06:05
更新:2020-02-15 04:36
カテゴリ:windows,マルチメディア,midi,audio

midiInOpenのdwFlagsのCALLBACK_THREADって何?と思って調べてみた。
http://ho3264.blog72.fc2.com/blog-entry-157.html
上記はwaveInXXXXの例だけどおそらくMIDIでも同じだろう。スレッド関数の中でメッセージループを回してMIDIメッセージをGetMessage()で受け取るのである。CALLBACK_THREADって指定したスレッドのメッセージキューにMIDIメッセージを送るということなのであった。

しかしこのdwFlagsの説明ってよくわからないな。。 http://msdn.microsoft.com/ja-jp/library/cc410524.aspx

CALLBACK_FUNCTION

dwCallback パラメータはコールバックプロシージャアドレスです。

CALLBACK_NULL

コールバック機構はありません。この値が既定の設定です。

CALLBACK_THREAD

dwCallback パラメータはスレッド識別子です。

CALLBACK_WINDOW

dwCallback パラメータはウィンドウハンドルです。

フラグの説明中に各フラグを指定したときにどういう処理を書かねばならないのか書いてないので私のようなよく知らない人が見ると路頭に迷ってしまう。
ひょっとすると過去にはチュートリアルとかガイドラインがあったのかもしれないのだけれど、枯れたAPIだからその部分が削除され、リファレンスだけが残っている感じがする。

各フラグの意味および指定するとメッセージはどのように送られ、それをどう処理するかを下に書いておく。

CALLBACK_FUNCTION
dwCallbackパラメータはコールバック関数へのアドレスであることをOSに通知します。OSは指定したコールバック関数にメッセージを送信します。コールバック関数はMidiInProcと同じ変数パラメータを持つ必要があります。APIの使用者はコールバック関数内でメッセージを処理します。
CALLBACK_NULL
コールバック機構はありません。この値が既定の設定です。
CALLBACK_THREAD
dwCallback パラメータはスレッド識別子であることをOSに通知します。OSは指定したスレッドのメッセージキューにメッセージを送信します。APIの使用者は指定したスレッド関数でGetMessageを使用してメッセージキューからメッセージを取り出し、処理します。
CALLBACK_WINDOW
dwCallback パラメータはウィンドウハンドルであることをOSに通知します。OSは指定したウィンドウのメッセージキューにメッセージを送信します。APIの使用者はウィンドウプロシージャ内でメッセージを処理します。