Freigeben über


Eigenschaftenseiten-Plug-In

Sie können eine Benutzeroberfläche für Geräteeigenschaften bereitstellen, indem Sie eine Eigenschaftenseite als Plug-In für den KS-Proxy schreiben. In diesem Thema wird erläutert, wie ein solches Plug-In geschrieben wird. Registrieren Sie zunächst Ihr Objekt, wie unter Registrieren von KS-Proxy-Plug-Ins beschrieben.

Deklarieren Sie als Nächstes die Factoryvorlage für Ihren Filter. Eine Factoryvorlage ist eine C++-Klasse, die Informationen für die Klassenfactory enthält.

Deklarieren Sie in Ihrer DLL ein globales Array von CFactoryTemplate-Objekten, eines für jede Filter- oder COM-Komponente in Ihrer DLL. Wenn Sie nur über eine Eigenschaftenseite verfügen, erstellen Sie nur ein Objekt im Array.

Generieren Sie für jedes Objekt eine GUID für den Klassenbezeichner (CLSID), und geben Sie einen Eintrag in der Deklaration an.

Das Array muss g_Templates benannt werden:

CFactoryTemplate g_Templates[] =
{
    {
        L"My Property Page",
        &CLSID_MyPropPage),
        CMyPropPage::CreateInstance,
        NULL,
        NULL
    },
};

Ihre Eigenschaftenseite sollte von der CBasePropertyPage-Klasse abgeleitet werden und mehrere Methoden von CBasePropertyPage außer Kraft setzen:

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 );
};

Um die Eigenschaftenseite zu initialisieren, ruft das Hostingeigenschaftenblatt IPropertyPage::SetPageSite auf. Dieser Aufruf führt zu einem Aufruf der OnConnect-Methode des Plug-Ins. Zum Zeitpunkt dieses Aufrufs wurde die Eigenschaftenseite mit dem Filter verbunden, aber die Eigenschaftenseite wurde noch nicht angezeigt.

Der im Aufruf von OnConnect bereitgestellte Parameter ist die Schnittstelle zum KS-Proxy, der dann nach einem Zeiger auf IKsPropertySet abgefragt werden kann. Anschließend können Sie IKsPropertySet::Get und IKsPropertySet::Set aufrufen, um die verfügbar gemachten Eigenschaften des Treibers zu bearbeiten.

Sie müssen auch eine CreateInstance-Methode bereitstellen. Das System ruft die Methode einer Eigenschaftenseite auf, um eine instance der Eigenschaftenseite zu erstellen. Diese Methode sollte den Konstruktor Ihrer Klasse aufrufen, um sie zu instanziieren.

Der Konstruktor empfängt einen Zeiger auf die äußere unbekannte Schnittstelle, bei der es sich in diesem Fall um einen KS-Proxy handelt.

Die OnDisconnect-Methode der Eigenschaftenseite wird aufgerufen, wenn die Eigenschaftenseite das zugeordnete Objekt freigeben soll. Dieser Rückruf sollte die Verweisanzahl auf dem Zeiger auf die Schnittstelle des KS-Proxys verringern, indem die Release-Methode aufgerufen wird.