再生ウィンドウのタイトルを変更する
先ほどの例では、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のその他機能は後述したいと思います。