ムービーの再生
動画ファイルの再生も、MCI_OPENコマンドで動画ファイルを
MCIデバイスとしてオープンし、MCI_PLAYで再生します。
しかし、音楽データとは異なり、動画を再生するには
映像を画面に表示させる必要があります。
アニメーションデバイスを開く場合はMCI_OPEN_PARMS構造体を
拡張したMCI_ANIM_OPEN_PARMS構造体を指定する事ができます。
dwStyleメンバにWS_CHILDスタイルを指定すれば、hWndParentの
クライアント領域に子ウィンドウとして動画が表示されます。
ただし、MCI_OPENコマンドでウィンドウスタイルを指定するには、
フラグにMCI_ANIM_OPEN_WSを指定しなければなりません。
同様に、親ウィンドウを指定する場合はMCI_ANIM_OPEN_PARENTを
指定します。
デバイスタイプは省略してもWindowsが適切なデバイスタイプを
判断してくれます。
要所のみ抜粋
※リファレンスで検索してもMCI_ANIM_OPEN_PARMS
がヒットしないのが気になります。ビルドはできますが
古い仕様で推奨されていないのかも知れません。
MCI_DGV_OPEN_PARMSかMCI_OVLY_OPEN_PARMSを使うべき
なんだろうか…。
MCIデバイスとしてオープンし、MCI_PLAYで再生します。
しかし、音楽データとは異なり、動画を再生するには
映像を画面に表示させる必要があります。
アニメーションデバイスを開く場合はMCI_OPEN_PARMS構造体を
拡張したMCI_ANIM_OPEN_PARMS構造体を指定する事ができます。
dwStyleメンバにWS_CHILDスタイルを指定すれば、hWndParentの
クライアント領域に子ウィンドウとして動画が表示されます。
ただし、MCI_OPENコマンドでウィンドウスタイルを指定するには、
フラグにMCI_ANIM_OPEN_WSを指定しなければなりません。
同様に、親ウィンドウを指定する場合はMCI_ANIM_OPEN_PARENTを
指定します。
デバイスタイプは省略してもWindowsが適切なデバイスタイプを
判断してくれます。
要所のみ抜粋
static MCI_ANIM_OPEN_PARMS maop;
static MCI_PLAY_PARMS mpp;
char strErr[256];
case WM_CREATE:
maop.dwCallback = ( DWORD )hWnd;
maop.lpstrElementName = "test.mpg";
maop.dwStyle = WS_CHILD | WS_VISIBLE;
maop.hWndParent = hWnd;
iErr = mciSendCommand( 0, MCI_OPEN,
MCI_OPEN_ELEMENT | MCI_ANIM_OPEN_PARENT | MCI_ANIM_OPEN_WS,
( DWORD )&maop );
if ( iErr ) {
mciGetErrorString( iErr, strErr, sizeof( strErr ) );
MessageBox( hWnd, strErr, NULL, MB_OK | MB_ICONERROR );
return -1;
}
mpp.dwCallback = ( DWORD )hWnd;
break;
case WM_LBUTTONDOWN:
mciSendCommand( maop.wDeviceID, MCI_PLAY, 0, ( DWORD )&mpp );
break;
case WM_DESTROY:
mciSendCommand( maop.wDeviceID, MCI_CLOSE, 0, 0 );
PostQuitMessage(0);
break;
※リファレンスで検索してもMCI_ANIM_OPEN_PARMS
がヒットしないのが気になります。ビルドはできますが
古い仕様で推奨されていないのかも知れません。
MCI_DGV_OPEN_PARMSかMCI_OVLY_OPEN_PARMSを使うべき
なんだろうか…。