Anzeigen der Eigenschaftenseiten eines Filters

[Das dieser Seite zugeordnete Feature DirectShow ist ein Legacyfeature. Es wurde von MediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation abgelöst. Diese Features wurden für Windows 10 und Windows 11 optimiert. Microsoft empfiehlt dringend, dass neuer Code mediaPlayer, IMFMediaEngine und Audio/Video Capture in Media Foundation anstelle von DirectShow verwendet, wenn möglich. Microsoft schlägt vor, dass vorhandener Code, der die Legacy-APIs verwendet, so umgeschrieben wird, dass nach Möglichkeit die neuen APIs verwendet werden.]

Eine Eigenschaftenseite ist eine Möglichkeit für einen Filter zur Unterstützung von Eigenschaften, die der Benutzer festlegen kann. In diesem Artikel wird beschrieben, wie Sie die Eigenschaftenseiten eines Filters in einer Anwendung anzeigen. Weitere Informationen zu Eigenschaftenseiten finden Sie in der Platform SDK-Dokumentation.

Hinweis

Obwohl viele der in DirectShow bereitgestellten Filter Eigenschaftenseiten unterstützen, sind sie für Debugzwecke vorgesehen und werden nicht für die Verwendung von Anwendungen empfohlen. In den meisten Fällen wird die entsprechende Funktionalität über eine benutzerdefinierte Schnittstelle für den Filter bereitgestellt. Eine Anwendung sollte diese Filter programmgesteuert steuern, anstatt ihre Eigenschaftenseiten für Benutzer verfügbar zu machen.

 

Filter mit Eigenschaftenseiten machen die ISpecifyPropertyPages-Schnittstelle verfügbar. Um zu bestimmen, ob ein Filter eine Eigenschaftenseite definiert, fragen Sie den Filter für diese Schnittstelle mithilfe von QueryInterface ab.

Wenn Sie direkt eine instance eines Filters erstellt haben (durch Aufrufen von CoCreateInstance), verfügen Sie bereits über einen Zeiger auf den Filter. Andernfalls können Sie die Filter im Diagramm mit der IFilterGraph::EnumFilters-Methode auflisten. Weitere Informationen finden Sie unter Auflisten von Objekten in einem Filtergraphen.

Sobald Sie über den ISpecifyPropertyPages-Schnittstellenzeiger verfügen, rufen Sie die Eigenschaftenseiten des Filters ab, indem Sie die ISpecifyPropertyPages::GetPages-Methode aufrufen. Diese Methode füllt ein gezähltes Array von GUIDs (Globally Unique Identifiers) mit dem Klassenbezeichner (CLSID) jeder Eigenschaftenseite aus. Ein gezähltes Array wird durch eine CAUUID-Struktur definiert, die Sie zuordnen, aber nicht initialisieren müssen. Die GetPages-Methode ordnet das Array zu, das im pElems-Element der CAUUID-Struktur enthalten ist. Wenn Sie fertig sind, geben Sie das Array frei, indem Sie die CoTaskMemFree-Funktion aufrufen.

Die OleCreatePropertyFrame-Funktion bietet eine einfache Möglichkeit, die Eigenschaftenseiten in einem modalen Dialogfeld anzuzeigen.

IBaseFilter *pFilter;
/* Obtain the filter's IBaseFilter interface. (Not shown) */
ISpecifyPropertyPages *pProp;
HRESULT hr = pFilter->QueryInterface(IID_ISpecifyPropertyPages, (void **)&pProp);
if (SUCCEEDED(hr)) 
{
    // Get the filter's name and IUnknown pointer.
    FILTER_INFO FilterInfo;
    hr = pFilter->QueryFilterInfo(&FilterInfo); 
    IUnknown *pFilterUnk;
    pFilter->QueryInterface(IID_IUnknown, (void **)&pFilterUnk);

    // Show the page. 
    CAUUID caGUID;
    pProp->GetPages(&caGUID);
    pProp->Release();
    OleCreatePropertyFrame(
        hWnd,                   // Parent window
        0, 0,                   // Reserved
        FilterInfo.achName,     // Caption for the dialog box
        1,                      // Number of objects (just the filter)
        &pFilterUnk,            // Array of object pointers. 
        caGUID.cElems,          // Number of property pages
        caGUID.pElems,          // Array of property page CLSIDs
        0,                      // Locale identifier
        0, NULL                 // Reserved
    );

    // Clean up.
    pFilterUnk->Release();
    FilterInfo.pGraph->Release(); 
    CoTaskMemFree(caGUID.pElems);
}

Grundlegende DirectShow-Aufgaben