Schritt 2: Implementieren von ISpecifyPropertyPages
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 der Filter unterstützt. 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;
}
};
/* ... */
}
Zuordnen von Arbeitsspeicher für das Array mithilfe von CoTaskMemAlloc. Der Aufrufer gibt den Arbeitsspeicher frei.
Weiter: Schritt 3. Unterstützung von QueryInterface.