Condividi tramite


Visualizzazione delle pagine delle proprietà di un filtro

[La funzionalità associata a questa pagina, DirectShow, è una funzionalità legacy. È stata sostituita da MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation. Queste funzionalità sono state ottimizzate per Windows 10 e Windows 11. Microsoft consiglia vivamente che il nuovo codice usi MediaPlayer, IMFMediaEngine e Audio/Video Capture in Media Foundation invece di DirectShow, quando possibile. Microsoft suggerisce che il codice esistente che usa le API legacy venga riscritto per usare le nuove API, se possibile.

Una pagina delle proprietà è un modo per consentire a un filtro di supportare le proprietà che l'utente può impostare. Questo articolo descrive come visualizzare le pagine delle proprietà di un filtro in un'applicazione. Per altre informazioni sulle pagine delle proprietà, vedere la documentazione di Platform SDK.

Nota

Anche se molti dei filtri forniti con le pagine delle proprietà di supporto DirectShow, sono destinati a scopi di debug e non sono consigliati per l'uso dell'applicazione. Nella maggior parte dei casi la funzionalità equivalente viene fornita tramite un'interfaccia personalizzata nel filtro. Un'applicazione deve controllare questi filtri a livello di codice, anziché esporre le pagine delle proprietà agli utenti.

 

I filtri con pagine delle proprietà espongono l'interfaccia ISpecifyPropertyPages . Per determinare se un filtro definisce una pagina delle proprietà, eseguire una query sul filtro per questa interfaccia usando QueryInterface.

Se è stata creata direttamente un'istanza di un filtro (chiamando CoCreateInstance), si dispone già di un puntatore al filtro. In caso contrario, è possibile enumerare i filtri nel grafico usando il metodo IFilterGraph::EnumFilters . Per informazioni dettagliate, vedere Enumerazione di oggetti in un grafico di filtro.

Dopo aver ottenuto il puntatore all'interfaccia ISpecifyPropertyPages , recuperare le pagine delle proprietà del filtro chiamando il metodo ISpecifyPropertyPages::GetPages . Questo metodo riempie una matrice contato di identificatori univoci globali (GUID) con l'identificatore di classe (CLSID) di ogni pagina delle proprietà. Una matrice con conteggiata è definita da una struttura CAUUID , che è necessario allocare ma non è necessario inizializzare. Il metodo GetPages alloca la matrice, contenuta nel membro pElems della struttura CAUUID . Al termine, liberare la matrice chiamando la funzione CoTaskMemFree .

La funzione OleCreatePropertyFrame consente di visualizzare in modo semplice le pagine delle proprietà all'interno di una finestra di dialogo modale.

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

Attività DirectShow di base