次の方法で共有


IResourceManager::SetFocus

SetFocus メソッドは、指定されたオブジェクトにユーザーのフォーカスが与えられたことをリソース マネージャに通知する。

構文

  HRESULT SetFocus(
  IUnknown *pFocusObject
);

パラメータ

pFocusObject

[in] ユーザー フォーカスを与えられたオブジェクトへのポインタ。

戻り値

実装に応じた HRESULT 値を返す。HRESULT は、次の標準的な定数の 1 つか、または一覧に示されていないその他の値となる。

戻りコード 説明
E_FAIL 失敗。
E_POINTER NULL ポインタ引数。
E_INVALIDARG 無効な引数。
E_NOTIMPL メソッドがサポートされていない。
S_OK または NOERROR 成功。

注意

DirectShow では、通常、フォーカスを受け取ったウィンドウを所有するビデオ レンダラが、ユーザー フォーカスを与えられるオブジェクトである。リソース マネージャは、リソース要求に次の順序で優先順位を与える。

  1. pFocusObject 引数で指定されたフォーカス オブジェクトに関する要求。
  2. フォーカス オブジェクトが共通ソース フィルタを共有しているような要求。
  3. フォーカス オブジェクトが共通フィルタ グラフを共有しているような要求。
  4. フォーカスと同じ処理からの要求。

リソース マネージャは、フォーカスが設定されてから ReleaseFocus が呼び出されるまで、フォーカス オブジェクトを維持しなければならない。つまり、このメソッドを呼び出したら、フォーカス オブジェクトの IUnknown インターフェイスが無効になる前に、ReleaseFocus を使う必要がある。ただし、別のオブジェクトからそれまでに確実に SetFocus が呼び出される場合はこの限りではない。フォーカス オブジェクト上には参照カウントが保持されない。

リソース マネージャは、置き換えられるか取り消されるまでこのポインタを保持し、リソース競合の解決に使う。リソース マネージャは、少なくとも QueryInterface を使って IBaseFilter インターフェイスを照会し、見つかった場合はこのインターフェイスのメソッドを使う。IBaseFilter のメソッドは、オーディオ レンダラが 2 つある場合に、どちらを使うかを決定する (ソース フィルタがフォーカス オブジェクトと共通するものを選ぶ) ために呼び出され、さらに、2 つのオブジェクトが同じフィルタ グラフに含まれるかどうかを調べるために呼び出される。

参照