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. Questo argomento illustra come scrivere un plug-in di questo tipo. Registrare prima di tutto l'oggetto come descritto in Registrazione dei plug-in proxy KS.

Dichiarare quindi il modello di factory per il filtro. Un modello di 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 di proprietà, creare un solo oggetto nella matrice.

Per ogni oggetto, generare un GUID per l'identificatore di classe (CLSID) e specificare 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 e deve 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 della proprietà, il foglio delle proprietà di hosting chiama IPropertyPage::SetPageSite. Questa chiamata genera una chiamata al 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, che può quindi essere eseguita una query per un puntatore a IKsPropertySet. È quindi possibile chiamare IKsPropertySet::Get e IKsPropertySet::Set per modificare le proprietà esposte del driver.

È anche 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 crearne un'istanza.

Il costruttore riceve un puntatore all'interfaccia sconosciuta esterna, 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 decrerere il conteggio dei riferimenti sul puntatore all'interfaccia al proxy KS chiamando il relativo metodo Release .