Windowsコード集 上のページ

#0004 ビデオ再生

ビデオファイル(*.AVI,*.MPGなど)をMCIで演奏する方法です。
最近は DirectShowを使うのが一般的のようですが、この方法の方が制御は簡単です。

初期化
mcihwnd = MCIWndCreate(parentWindow,GetModuleHandle(NULL),
                       WS_CHILD|WS_VISIBLE|MCIWNDF_NOTIFYMODE|MCIWNDF_NOMENU|MCIWNDF_NOPLAYBAR,
                       NULL);
第1パラメータには、ビデオを表示するウィンドゥを指定します。
つまり、前もってCreateWindow等の関数でウィンドゥを生成しておく必要があります。
ウィンドゥハンドルは、AVIを表示するウィンドゥを示します。
実行後、以降の命令を呼ぶのに必要なパラメータであるウィンドゥハンドルが返ります。
ビデオファイルオープン
MCIWndOpen(mcihwnd,"videofile.avi",0);
下線部には、オープンしたビデオファイルを指定します。
この関数が成功すると、0 が返ってきます。
再生
MCIWndPlayFrom(mcihwnd,0);
Play命令には他にもあるのですが、この命令が一番無難です。
これによって、頭から最後までを再生します。
繰り返し再生を行う
MCIWndCreateに MCIWNDF_NOTIFYMODEフラグが立っているとき、親ウィンドゥに MCIWNDM_NOTIFYMODEメッセージが通知されます。 これを利用する事によって、繰り返し再生が可能です。
また再生終了のチェックも、このメッセージで行うと良いでしょう。
// ウィンドゥのコールバック関数
LRESULT CALLBACK WindowProc(HWND hwnd,UINT msg,WPARAM wparam,LPARAM lparam)
{
    switch(msg){
    case MCIWNDM_NOTIFYMODE:  // ウィンドゥに送られるメッセージです
        // 該当するビデオウィンドゥかどうかチェックします
        if((HWND)wparam != mcihwnd)return 0;

        // 水色の部分が、繰り返し演奏の手続きです
        switch(lparam){
        case MCI_MODE_STOP:   // 再生停止メッセージ
            MCIWndPlayFrom(mcihwnd,0);
            break;
        case MCI_....:
            // 他のMCIメッセージの処理
               :
        }
        break;
    case WM_.....
        // 他の通知メッセージの処理
           :
    default:
        return DefWindowProc(hwnd,msg,wparam,lparam);
    }
    return 0;
}
停止
MCIWndStop(mcihwnd);
クローズ
MCIWndStop(mcihwnd);
MCIWndClose(mcihwnd);
MCIWndDestroy(mcihwnd);
Stop(停止),Close(クローズ),Destroy(破棄)と順番にやっていきます。
MCIWndDestroyを行った場合、再度オープンを行うにはまたMCIWndCreateする必要があります。


上のページ