#pragma comment (lib, "strmiids.lib")
#include <windows.h>
#include <dshow.h>
#define FileName TEXT("test.mid")
IGraphBuilder *pGB;
IMediaControl *pMC;
void Init()
{
//COMを初期化
CoInitialize(NULL);
//FilterGraphを生成
CoCreateInstance(CLSID_FilterGraph,NULL,CLSCTX_INPROC,
IID_IGraphBuilder,(LPVOID *)&pGB);
//MediaControlインターフェース取得
pGB->QueryInterface(IID_IMediaControl,
(LPVOID *)&pMC);
//Graphを生成
pMC->RenderFile(FileName);
//再生開始
pMC->Run();
}
//コールバック
LRESULT CALLBACK WndProc(HWND hwnd , UINT msg , WPARAM wp , LPARAM lp)
{
switch (msg) {
//終了処理
case WM_DESTROY:
//資源を解放
pMC->Release();
pGB->Release();
//COM終了
CoUninitialize();
PostQuitMessage(0);
return 0;
}
return DefWindowProc(hwnd , msg , wp , lp);
}
//メイン
int WINAPI WinMain(HINSTANCE hInst , HINSTANCE hPrevI , PSTR lpCmd , int
nCmdShow)
{
HWND hwnd;
MSG msg;
WNDCLASS winc;
winc.style = CS_HREDRAW | CS_VREDRAW;
winc.lpfnWndProc = WndProc;
winc.cbClsExtra = winc.cbWndExtra = 0;
winc.hInstance = hInst;
winc.hIcon = LoadIcon(NULL , IDI_APPLICATION);
winc.hCursor = LoadCursor(NULL , IDC_ARROW);
winc.hbrBackground = (HBRUSH)GetStockObject(WHITE_BRUSH);
winc.lpszMenuName = NULL;
winc.lpszClassName = TEXT("window");
if (!RegisterClass(&winc)) return 0;
hwnd = CreateWindow(TEXT("window") , TEXT("Hellow DirectShow
World!!") ,
WS_OVERLAPPEDWINDOW | WS_VISIBLE ,
100 , 100 , 320 , 240 , NULL , NULL ,hInst , NULL);
if (hwnd == NULL) return 0;
Init();
while (GetMessage(&msg , NULL , 0 , 0))
DispatchMessage(&msg);
return msg.wParam;
}
|