CBasePropertyPage クラス

[このページに関連付けられている機能 DirectShow は、従来の機能です。 MediaPlayer、IMFMediaEngine、Media Foundation のオーディオ/ビデオ キャプチャに置き換わりました。 これらの機能は、Windows 10とWindows 11用に最適化されています。 新しいコードでは、可能であれば、DirectShow ではなく Media Foundation で MediaPlayerIMFMediaEngineAudio/Video Capture を使用することを強くお勧めします。 Microsoft は、レガシ API を使用する既存のコードを、可能であれば新しい API を使用するように書き換えるよう提案しています。]

cbasepropertypage クラス階層

クラスは 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::OnActivateCBasePropertyPage::OnApplyChanges など、さまざまな仮想メソッドを呼び出します。 基底クラスでは、これらのメソッドは単にS_OKを返します。 派生クラスでは、これらの仮想メソッドの一部またはすべてをオーバーライドする必要があります。 詳細については、個々のメソッドの解説を参照してください。

このクラスを使用してプロパティ ページを作成する方法の拡張例については、「フィルター プロパティ ページ の作成」を参照してください。

要件

要件
ヘッダー
Cprop.h (Streams.h を含む)
ライブラリ
Strmbase.lib (製品版ビルド);
Strmbasd.lib (デバッグ ビルド)