プロパティ ページ プラグイン
プロパティ ページを KS プロキシのプラグインとして記述することで、デバイス プロパティへのユーザー インターフェイスを提供できます。 このトピックでは、このようなプラグインを記述する方法について説明します。 まず、「KS プロキシ プラグインの登録」の説明に従ってオブジェクトを登録します。
次に、フィルターのファクトリ テンプレートを宣言します。 ファクトリ テンプレートは、クラス ファクトリの情報を含む C++ クラスです。
DLL で、CFactoryTemplate オブジェクトのグローバル配列を、DLL 内のフィルターまたは COM コンポーネントごとに 1 つずつ宣言します。 プロパティ ページが 1 つだけの場合は、配列内に 1 つのオブジェクトのみを作成します。
オブジェクトごとに、クラス識別子 (CLSID) の GUID を生成し、宣言にエントリを指定します。
配列には g_Templates で次の名前を付ける必要があります。
CFactoryTemplate g_Templates[] =
{
{
L"My Property Page",
&CLSID_MyPropPage),
CMyPropPage::CreateInstance,
NULL,
NULL
},
};
プロパティ ページはクラス CBasePropertyPage から派生し、次のCBasePropertyPage のメソッドのいくつかをオーバーライドする必要があります。
class CMyPropPage: public CBasePropertyPage
{
public:
// creation routine returns ptr to new prop pg as a CUnknown
static CUnknown* CreateInstance( LPUNKNOWN piOuterUnknown, HRESULT* phResult );
// overridden methods:
HRESULT OnConnect( IUnknown *punk);
HRESULT OnDisconnect();
HRESULT OnApplyChanges();
HRESULT OnActivate();
HRESULT OnDeactivate();
INT_PTR OnReceiveMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
private:
CMyPropPage ( LPUNKNOWN piOuterUnknown );
};
プロパティ ページを初期化するために、ホスティング プロパティ シートは IPropertyPage::SetPageSite を呼び出します。 この呼び出しにより、プラグインの OnConnect メソッドが呼び出されます。 この呼び出しの時点では、プロパティ ページはフィルターに接続されていますが、プロパティ ページはまだ表示されていません。
OnConnect への呼び出しで提供されるパラメータは、KS プロキシへのインターフェイスであり、IKsPropertySet へのポインタを問い合わせることができます。 その後、IKsPropertySet::Get と IKsPropertySet::Set を呼び出して、ドライバーの公開されたプロパティを操作できます。
CreateInstance メソッドも指定する必要があります。 システムは、プロパティ ページのメソッドを呼び出して、プロパティ ページのインスタンスを作成します。 このメソッドは、クラスのコンストラクターを呼び出してインスタンス化する必要があります。
コンストラクターは、外部の不明なインターフェイスへのポインターを受け取ります。この場合は KS プロキシです。
プロパティ ページの OnDisconnect メソッドは、プロパティ ページが関連付けられたオブジェクトを解放する必要があるときに呼び出されます。 このコールバックは、Release メソッドを呼び出して、KS プロキシへのインターフェイスへのポインターの参照カウントをデクリメントする必要があります。