Condividi tramite


Passaggio 2. Implementare ISpecifyPropertyPages

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEnginee Acquisizione audio/video in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft raccomanda vivamente che il nuovo codice utilizzi MediaPlayer, IMFMediaEngine e Acquisizione audio/video in Media Foundation anziché DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Successivamente, implementare l'interfaccia ISpecifyPropertyPages nel filtro. Questa interfaccia include un singolo metodo, GetPages, che restituisce una matrice di CLSID per le pagine delle proprietà supportate dal filtro. In questo esempio il filtro ha una singola pagina delle proprietà. Per iniziare, generare il CLSID e dichiararlo nel file di intestazione:

// Always create new GUIDs! Never copy a GUID from an example.
DEFINE_GUID(CLSID_SaturationProp, 0xa9bd4eb, 0xded5, 
0x4df0, 0xba, 0xf6, 0x2c, 0xea, 0x23, 0xf5, 0x72, 0x61);

Ora implementare il metodo GetPages:

class CGrayFilter : public ISaturation,
                    public ISpecifyPropertyPages, 
                    /* Other inherited classes. */
{
public:
    STDMETHODIMP GetPages(CAUUID *pPages)
    {
        if (pPages == NULL) return E_POINTER;
        pPages->cElems = 1;
        pPages->pElems = (GUID*)CoTaskMemAlloc(sizeof(GUID));
        if (pPages->pElems == NULL) 
        {
            return E_OUTOFMEMORY;
        }
        pPages->pElems[0] = CLSID_SaturationProp;
        return S_OK;
    }
};

/* ... */

}

Allocare memoria per la matrice usando CoTaskMemAlloc. Il chiamante provvederà a rilasciare la memoria.

Avanti: passaggio 3. Supporta QueryInterface.

Creazione di una pagina delle proprietà filtro