Partager via


Plug-in pour page de propriétés

Vous pouvez fournir une interface utilisateur aux propriétés de l’appareil en écrivant une page de propriétés en tant que plug-in pour le proxy KS. Cette rubrique explique comment écrire un tel plug-in. Tout d’abord, inscrivez votre objet comme décrit dans l’inscription des plug-ins proxy KS.

Ensuite, déclarez le modèle de fabrique de votre filtre. Un modèle de fabrique est une classe C++ qui contient des informations pour la fabrique de classe.

Dans votre DLL, déclarez un tableau global d’objets CFactoryTemplate, un pour chaque filtre ou composant COM de votre DLL. Si vous n’avez qu’une seule page de propriétés, créez un seul objet dans le tableau.

Pour chaque objet, générez un GUID pour l’identificateur de classe (CLSID) et fournissez une entrée dans la déclaration.

Le tableau doit être nommé g_Templates :

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

Votre page de propriétés doit dériver de la classe CBasePropertyPage et remplacer plusieurs des méthodes de 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 );
};

Pour initialiser la page de propriétés, la feuille de propriétés d’hébergement appelle IPropertyPage ::SetPageSite. Cet appel entraîne un appel de la méthode OnConnect du plug-in. Au moment de cet appel, la page de propriétés a été connectée au filtre, mais la page de propriétés n’a pas encore été affichée.

Le paramètre fourni dans l’appel à OnConnect est l’interface vers le proxy KS, qui peut ensuite être interrogé pour un pointeur vers IKsPropertySet. Vous pouvez ensuite appeler IKsPropertySet ::Get et IKsPropertySet ::Set pour manipuler les propriétés exposées du pilote.

Vous devez également fournir une méthode CreateInstance . Le système appelle la méthode d’une page de propriétés pour créer une instance de la page de propriétés. Cette méthode doit appeler le constructeur de votre classe pour l’instancier.

Le constructeur reçoit un pointeur vers l’interface inconnue externe, qui, dans ce cas, est le proxy KS.

La méthode OnDisconnect de la page de propriétés est appelée lorsque la page de propriétés doit libérer l’objet associé. Ce rappel doit décrémenter le nombre de références sur le pointeur vers l’interface du proxy KS en appelant sa méthode Release.