Schritt 2: Implementieren von ISpecifyPropertyPages

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde durch MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation ersetzt. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code nach Möglichkeit MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet. Microsoft schlägt vor, vorhandenen Code, der die Legacy-APIs verwendet, um nach Möglichkeit die neuen APIs zu verwenden.]

Implementieren Sie als Nächstes die ISpecifyPropertyPages-Schnittstelle in Ihrem Filter. Diese Schnittstelle verfügt über eine einzelne Methode, GetPages, die ein Array von CLSIDs für die Eigenschaftenseiten zurückgibt, die vom Filter unterstützt werden. In diesem Beispiel verfügt der Filter über eine einzelne Eigenschaftenseite. Generieren Sie zunächst die CLSID und deklarieren Sie sie in Ihrer Headerdatei:

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

Implementieren Sie nun die GetPages-Methode :

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;
    }
};

/* ... */

}

Weisen Sie mithilfe von CoTaskMemAlloc Arbeitsspeicher für das Array zu. Der Aufrufer gibt den Arbeitsspeicher frei.

Weiter: Schritt 3. Support QueryInterface.

Erstellen einer Filtereigenschaftenseite