CBasePropertyPage クラス
[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayer、IMFMediaEngine、Audio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]
クラスは CBasePropertyPage
、プロパティ ページを実装するための抽象クラスです。 プロパティ ページをサポートするフィルター (またはその他のオブジェクト) を記述する場合は、このクラスを使用します。
保護されたメンバー変数 | 説明 |
---|---|
m_bDirty | いずれかのプロパティが変更されたかどうかを示します。 |
m_DialogId | ダイアログのリソース識別子。 |
m_Dlg | ダイアログ ウィンドウにハンドルします。 |
M_hwnd | ダイアログ ウィンドウにハンドルします。 |
m_pPageSite | プロパティ ページ サイトの IPropertyPageSite インターフェイスへのポインター。 |
m_TitleId | ダイアログ タイトルを含む文字列のリソース識別子。 |
パブリック メソッド | 説明 |
CBasePropertyPage | コンストラクター メソッド。 |
~CBasePropertyPage | デストラクター メソッド。 仮想。 |
OnActivate | プロパティ ページがアクティブ化されたときに呼び出されます。 仮想。 |
OnApplyChanges | ユーザーがプロパティ ページに変更を適用すると呼び出されます。 仮想。 |
OnConnect | プロパティ ページに関連付けられているオブジェクトへの IUnknown ポインターを提供します。 仮想。 |
OnDeactivate | ダイアログ ボックス ウィンドウが破棄されたときに呼び出されます。 仮想。 |
OnDisconnect | プロパティ ページが関連付けられたオブジェクトを解放するときに呼び出されます。 仮想。 |
OnReceiveMessage | ダイアログ ボックスがメッセージを受信したときに呼び出されます。 仮想。 |
IPropertyPage メソッド | 説明 |
アクティブ化 | ダイアログ ボックス ウィンドウを作成します。 |
適用 | プロパティ ページに関連付けられているオブジェクトに現在のプロパティ ページの値を適用します |
非アクティブ化 | ダイアログ ウィンドウを破棄します。 |
GetPageInfo | プロパティ ページの情報を取得します。 |
ヘルプ | プロパティ ページのヘルプを呼び出します。 |
IsPageDirty | プロパティ ページがアクティブ化されてから、または IPropertyPage::Apply の最新の呼び出し以降に変更されたかどうかを示します。 |
移動 | ダイアログ ボックスの位置とサイズを変更します。 |
SetObjects | プロパティ ページに関連付けられているオブジェクトの IUnknown ポインターを提供します。 |
SetPageSite | プロパティ ページを初期化します。 |
表示 | ダイアログ ボックスを表示または非表示にします。 |
TranslateAccelerator | キーストロークを処理するようにプロパティ ページに指示します。 |
解説
プロパティ ページは COM オブジェクトであるため、クラス識別子 (CLSID) の GUID を生成し、 CFactoryTemplate 配列にエントリを指定する必要があります。 詳細については、「 DirectShow と COM」を参照してください。 次の例は、一般的なクラス ファクトリ エントリを示しています。
CFactoryTemplate g_Templates[] =
{
{
L"My Property Page",
&CLSID_MyPropPage,
CMyProp::CreateInstance,
NULL,
NULL
},
/* Also include the template for your filter (not shown). */
};
フィルターで ISpecifyPropertyPages インターフェイスを公開する 必要があります。 このインターフェイスには、プロパティ ページの CLSID を返す GetPages という 1 つのメソッドが含まれています。 次の例は、このメソッドを実装する方法を示しています。
STDMETHODIMP CMyFilter::GetPages(CAUUID *pPages)
{
if (!pPages) return E_POINTER;
pPages->cElems = 1;
pPages->pElems = reinterpret_cast<GUID*>(CoTaskMemAlloc(sizeof(GUID)));
if (pPages->pElems == NULL)
{
return E_OUTOFMEMORY;
}
*(pPages->pElems) = CLSID_MyPropPage;
return S_OK;
}
フィルターの NonDelegatingQueryInterface メソッドも必ずオーバーライドしてください。 詳細については、「DirectShow と COM」および「INonDelegatingUnknown」を参照してください。
次に、プロジェクトにリソースとしてダイアログを作成し、ダイアログ タイトルを保持する文字列リソースを作成します。 これらのリソース ID はどちらも CBasePropertyPage コンストラクターのパラメーターです。 タイトル文字列をリソースに保持すると、プロパティ ページをローカライズしやすくなります。
CBasePropertyPage クラスは、IPropertyPage インターフェイスのフレームワークを提供します。 このフレームワークは、 CBasePropertyPage::OnActivate、 CBasePropertyPage::OnApplyChanges など、さまざまな仮想メソッドを呼び出します。 基底クラスでは、これらのメソッドは単にS_OKを返します。 派生クラスでは、これらの仮想メソッドの一部またはすべてをオーバーライドする必要があります。 詳細については、個々のメソッドの解説を参照してください。
このクラスを使用してプロパティ ページを作成する方法の拡張例については、「フィルター プロパティ ページ の作成」を参照してください。
要件
要件 | 値 |
---|---|
ヘッダー |
|
ライブラリ |
|