Étape 2. Implémenter ISpecifyPropertyPages

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture in Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement que le nouveau code utilise MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation au lieu de DirectShow, si possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Ensuite, implémentez l’interface ISpecifyPropertyPages dans votre filtre. Cette interface a une méthode unique, GetPages, qui retourne un tableau de CLSID pour les pages de propriétés que le filtre prend en charge. Dans cet exemple, le filtre a une seule page de propriétés. Commencez par générer le CLSID et le déclarer dans votre fichier d’en-tête :

// 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);

Implémentez maintenant la méthode 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;
    }
};

/* ... */

}

Allouez de la mémoire au tableau à l’aide de CoTaskMemAlloc. L’appelant libère la mémoire.

Suivant : Étape 3. Prise en charge de QueryInterface.

Création d’une page de propriétés de filtre