再生ウィンドウのタイトルを変更する

先ほどの例では、RenderFile()を使って簡単にGraphを作成してMPEGファイルを再生する方法を解説しました。 ここでは、IVideoWindowインターフェースを利用してウィンドウのタイトルを変更する方法を説明します。 (注意)ここの例では、サンプルを簡潔にするためにエラー処理を書いていません。

サンプルコード

まず、何も考えずに以下のコードを書いてみましょう。 先ほどを同じく、「C:\DXSDK\Samples\media\water.mpg」というMPEGファイルを再生します。 ただし、今度はウィンドウのタイトルが変更されます。


#include <stdio.h>

#include <dshow.h>

#define	FILENAME L"c:\\DXSDK\\Samples\\Media\\butterfly.mpg"

int
main()
{
 IGraphBuilder *pGraphBuilder;
 IMediaControl *pMediaControl;
 IMediaEvent *pMediaEvent;
 long eventCode;
 IVideoWindow *pVideoWindow;

 CoInitialize(NULL);

 CoCreateInstance(CLSID_FilterGraph,
	NULL,
	CLSCTX_INPROC,
	IID_IGraphBuilder,
	(LPVOID *)&pGraphBuilder);

 pGraphBuilder->QueryInterface(IID_IMediaControl,
	(LPVOID *)&pMediaControl);

 pGraphBuilder->QueryInterface(IID_IMediaEvent,
	(LPVOID *)&pMediaEvent);

 pMediaControl->RenderFile(FILENAME);

 pGraphBuilder->QueryInterface(IID_IVideoWindow,
	(LPVOID *)&pVideoWindow);
 // RenderFile()より前だと失敗します
 pVideoWindow->put_Caption(L"THIS IS A TEST");

 pMediaControl->Run();

 pMediaEvent->WaitForCompletion(-1, &eventCode);

 pMediaEvent->Release();
 pMediaControl->Release();
 pGraphBuilder->Release();
 CoUninitialize();

 return 0;
}

このサンプルのポイントは、RenderFileを行った後にGraphBuilderからIVideoWindowインターフェースを取得して、put_Captionを行っていることです。 RenderFileが行われた後に初めてVideoRendererが用意されるため、RenderFileよりも前にIVideoWindowを取得しても失敗します。 これは、RenderFileが行われる前では出力先がどこになるかわからないからです。

このサンプルではIVideoWindowのput_Captionを利用してウィンドウのタイトルを設定しています。 IVideoWindowはこの他にも色々便利な機能があります。 IVideoWindowのその他機能は後述したいと思います。