DVD インターフェイス ポインタの取得
フィルタ グラフが作成されると、アプリケーションは DVD ナビゲータ、フィルタ グラフ マネージャ、ビデオ ウィンドウの制御に必要なポインタを取得できる。以下のサンプル コードは、エラー チェックなどのコードを省いて単純化した基本的な手順を示している。完全なコードは、DVD サンプル アプリケーションで CDvdCore::BuildGraph メソッドに含まれている。
// DVD グラフ ビルダ オブジェクトのインスタンスを作成する。
HRESULT hr;
hr = CoCreateInstance(CLSID_DvdGraphBuilder,
NULL,
CLSCTX_INPROC_SERVER,
IID_IDvdGraphBuilder,
reinterpret_cast<void**>(&m_pIDvdGB));
// DVD フィルタ グラフを作成する。
AM_DVD_RENDERSTATUS buildStatus;
hr = m_pIDvdGB->RenderDvdVideoVolume(pszwDiscPath, m_dwRenderFlags, &buildStatus);
// DVD ナビゲータ インターフェイスへのポインタを取得する。
hr = m_pIDvdGB->GetDvdInterface(IID_IDvdInfo2, reinterpret_cast<void**>(&m_pIDvdI2));
hr = m_pIDvdGB->GetDvdInterface(IID_IDvdControl2, reinterpret_cast<void**>(&m_pIDvdC2));
...
// フィルタ グラフ マネージャへのポインタを取得する。
hr = m_pDvdGB->GetFiltergraph(&m_pGraph);
...
// フィルタ グラフを全体として制御するため、
// グラフ ポインタを使って IMediaControl へのポインタを取得する。
hr = m_pGraph->QueryInterface(IID_IMediaControl, reinterpret_cast<void**>(&m_pIMC));
...
// DVD やその他のフィルタ グラフ イベントの処理に使われる
// IMediaEventEx へのポインタを取得する。
hr = m_pGraph->QueryInterface(IID_IMediaEventEx, reinterpret_cast<void**>(&m_pME));
...
// ビデオ レンダラ フィルタのウィンドウ スタイルとメッセージ処理の動作を設定するため、
// もう一度グラフ ビルダ ポインタを使って IVideoWindow インターフェイスを取得する。
hr = m_pIDvdGB->GetDvdInterface(IID_IVideoWindow, reinterpret_cast<void**>(&m_pIVW));
hr = m_pDvdGB->GetDvdInterface(IID_IAMLine21Decoder, reinterpret_cast<void**>(&pL21Dec));