Platform SDK: DirectX

ステップ 5 : 再生の通知の処理

[Visual Basic]

ここでは、C および C++ でのアプリケーション開発について説明する。Visual Basic については、「DirectSound Visual Basic チュートリアル」を参照すること。

[C++]

通知は、WinMain 関数のメッセージ ループ内で、シグナル送信されたイベントとして受信される。次の部分的なコードは、ループでどのようにしてシグナル送信されたイベントと標準的なメッセージを取り込むかを示す。

BOOL Done = FALSE;
while (!Done)
{
    DWORD dwEvt = MsgWaitForMultipleObjects(
            NUMEVENTS,      // 考えられるイベント数。
            rghEvent,       // ハンドルの位置。
            FALSE,          // すべてを待つか。
            INFINITE,       // 待機時間の長さ。
            QS_ALLINPUT);   // あらゆるメッセージはイベントである。
 
    // WAIT_OBJECT_0 == 0 以外では最初のイベントに割り当てられた
    // 任意のインデックス値として適切に扱われるので、dwEvt から
    // この値を引いて、0 から始まるイベントのインデックスを取得する。
 
    dwEvt -= WAIT_OBJECT_0;
 
    // バッファがイベントを設定していた場合、このプロセスへの
    // 入力が発生する。
 
    if (dwEvt < NUMEVENTS) 
    {
        StreamToBuffer(dwEvt); // データを出力ストリームにコピーする。
    }
 
    // これが最後のイベントである場合、そのイベントはメッセージである。
 
    else if (dwEvt == NUMEVENTS) 
    {         
        while (PeekMessage(&msg, NULL, 0, 0, PM_REMOVE)) 
        {
            if (msg.message == WM_QUIT) 
            {
                Done = TRUE;
            } 
            else
            {
                TranslateMessage(&msg);
                DispatchMessage(&msg);
            }
        }
    }  // メッセージ処理の終了。
} // while (!Done)

次項 : ステップ 6 : ウェーブ ファイルからのデータのストリーミング