ビデオファイル(*.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する必要があります。