Plug-in de 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 Inscription des plug-ins de proxy KS.
Ensuite, déclarez le modèle de fabrique pour votre filtre. Un modèle de fabrique est une classe C++ qui contient des informations sur la fabrique de classes.
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 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 un 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 vers le proxy KS en appelant sa méthode Release .