ムービーの再生

動画ファイルの再生も、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が適切なデバイスタイプを
判断してくれます。

要所のみ抜粋

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を使うべき
なんだろうか…。
Windows > マルチメディア | comments (0) | trackbacks (0)

Comments

Comment Form

icons:

Trackbacks