Condividi tramite


Plug-in della pagina delle proprietà

È possibile fornire un'interfaccia utente alle proprietà del dispositivo scrivendo una pagina delle proprietà come plug-in per il proxy KS. In questo argomento viene illustrato come scrivere un plug-in di questo tipo. Prima di tutto, registrare l'oggetto come descritto in Registrazione dei plug-in proxy KS.

Successivamente, dichiara il modello di fabbrica per il filtro. Un modello factory è una classe C++ che contiene informazioni per la class factory.

Nella DLL dichiarare una matrice globale di oggetti CFactoryTemplate, uno per ogni filtro o componente COM nella DLL. Se si dispone di una sola pagina delle proprietà, creare un solo oggetto nella matrice.

Per ogni oggetto, generare un GUID per l'identificatore di classe (CLSID) e fornire una voce nella dichiarazione.

La matrice deve essere denominata g_Templates:

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

La pagina delle proprietà deve derivare dalla classe CBasePropertyPage ed eseguire l'override di diversi metodi di 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 );
};

Per inizializzare la pagina delle proprietà, la finestra delle proprietà di hosting chiama IPropertyPage::SetPageSite. Questa chiamata genera una chiamata del metodo OnConnect del plug-in. Al momento della chiamata, la pagina delle proprietà è stata connessa al filtro, ma la pagina delle proprietà non è ancora stata visualizzata.

Il parametro fornito nella chiamata a OnConnect è l'interfaccia del proxy KS, sulla quale è possibile effettuare una query per ottenere un puntatore a IKsPropertySet. È quindi possibile chiamare IKsPropertySet::Get e IKsPropertySet::Set per modificare le proprietà esposte del driver.

È inoltre necessario specificare un metodo CreateInstance . Il sistema richiama il metodo di una pagina delle proprietà per creare un'istanza della pagina delle proprietà. Questo metodo deve chiamare il costruttore della classe per istanziarla.

Il costruttore riceve un puntatore all'interfaccia esterna sconosciuta, che in questo caso è il proxy KS.

Il metodo OnDisconnect della pagina delle proprietà viene chiamato quando la pagina delle proprietà deve rilasciare l'oggetto associato. Questo callback deve decrementare il conteggio dei riferimenti sul puntatore all'interfaccia al proxy KS chiamando il relativo metodo Release .