Compartilhar via


Etapa 2. Implementar ISpecifyPropertyPages

[O recurso associado a esta página, DirectShow, é um recurso herdado. Ele foi substituído por MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo na Media Foundation. Esses recursos foram otimizados para Windows 10 e Windows 11. A Microsoft recomenda fortemente que o novo código use MediaPlayer, IMFMediaEngine e Captura de Áudio/Vídeo no Media Foundation em vez de DirectShow, quando possível. A Microsoft sugere que o código existente que usa as APIs herdadas seja reescrito para usar as novas APIs, se possível.]

Em seguida, implemente a interface ISpecifyPropertyPages no filtro. Essa interface tem um único método, GetPages, que retorna uma matriz de CLSIDs para as páginas de propriedades compatíveis com o filtro. Neste exemplo, o filtro tem uma única página de propriedades. Comece gerando o CLSID e declarando-o no arquivo de cabeçalho:

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

Agora implemente o método 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;
    }
};

/* ... */

}

Alocar memória para a matriz usando CoTaskMemAlloc. O chamador liberará a memória.

Próximo: Etapa 3. Suporte a QueryInterface.

Criando uma página de propriedades de filtro