>> WINAPI入門トップに戻る

動画の再生(MCIウィンドウ)

今回はMCIウィンドウを使った動画の再生について説明します。

MCIウィンドウという高レベルなAPIを使うことによって、
簡単に動画を再生することができます。
MCIウィンドウを作成するために、MCIWndCreate関数を使います。

HWND MCIWndCreate(
HWND hwndParent,
HINSTANCE hInstance,
DWORD dwStyle,
LPSTR szFile
);

この関数を使う為にはvfw.hをインクルードしvfw32.libをリンクする必要があります。
第一引数にや親ウィンドウハンドル
第二引数はインスタンスハンドル
第三引数は作成するウィンドウスタイル、
第四引数は対象のファイル名を入力します。
ウィンドウスタイルは子ウィンドウとして扱うので、
WS_CHILD | WS_VISIBLE | WS_BORDERなどをつけておけば特に問題はないです。
第四引数で指定するファイルはWAVEやMP3、AVI、MPEGなどの主要メディアファイルであれば再生可能です。
成功するとMCIウィンドウのハンドルを返します。

作詞したMCIウィンドウは、MCIWndDestroy関数で破棄します。
引数はMCIウィンドウハンドルだけです。

以上の関数を使ったサンプルが以下になります。

#include <windows.h>
#include <stdio.h>
#include <string.h>
#include <mmsystem.h>
#pragma comment(lib,"winmm.lib")
#include <vfw.h>
#pragma comment(lib,"vfw32.lib")

#define MSG(m) {\
	MessageBoxA(NULL,m,NULL,MB_OK);}

//ウィンドウハンドル
HWND hwnd;
//インスタンスハンドル
HINSTANCE hinst;

//ウィンドウ横幅
#define WIDTH 500
#define HEIGHT 300



LRESULT CALLBACK WinProc(HWND hwnd,UINT msg,WPARAM wp,LPARAM lp)
{
	static HWND mcihwnd;

	switch(msg){
		case WM_DESTROY:
			MCIWndDestroy(mcihwnd);

			PostQuitMessage(0);

			return 0;

		case WM_CREATE:
			mcihwnd=MCIWndCreate(hwnd,hinst,WS_CHILD | WS_BORDER | WS_VISIBLE,"test.avi");

			return 0;
		
	}
	return DefWindowProc(hwnd,msg,wp,lp);
}

int WINAPI WinMain(HINSTANCE hInstance,HINSTANCE hPrevInstance,LPSTR lpCmdLine,int nShowCmd)
{
	MSG msg;
	WNDCLASS wc;

	wc.style=CS_HREDRAW | CS_VREDRAW;
	wc.lpfnWndProc=WinProc;
	wc.cbClsExtra=wc.cbWndExtra=0;
	wc.hInstance=hInstance;
	wc.hCursor=wc.hIcon=NULL;
	wc.hbrBackground=(HBRUSH)GetStockObject(BLACK_BRUSH);
	wc.lpszClassName="test";
	wc.lpszMenuName=NULL;
	
	if(!RegisterClass(&wc)){
		MSG("クラスの登録失敗");
		return -1;
	}

	
	//インスタンスハンドル
	hinst=hInstance;

	hwnd=CreateWindowA("test","テストウィンドウ",WS_VISIBLE | WS_CAPTION | WS_SYSMENU | WS_MINIMIZEBOX,
		0,0,1000,700,NULL,NULL,hInstance,NULL);


	if(hwnd==NULL){
		MSG("ウィンドウ作成失敗");
		return -1;
	}


	//エラーチェック用変数
	int check;

	while(check=GetMessage(&msg,NULL,0,0)){
		if(check==-1){
			break;
		}
		DispatchMessage(&msg);
	}

	//クラス解放
	UnregisterClass("test",hinst);

	return 0;

}

プロジェクトファイルがあるフォルダにtest.aviというAVIファイルを置いてください。
それから実行すると、自動的に再生ボタンやシークバーつきのウィンドウが表示されます。
後は普通の動画再生プレイヤーと同じようにつかえます。

↑こんな感じです。

今回の説明は以上になります。

>> WINAPI入門トップに戻る