Mostrar las páginas de propiedades de un filtro
[La característica asociada a esta página, DirectShow, es una característica heredada. Se ha reemplazado por MediaPlayer, IMFMediaEngine y Captura de audio/vídeo en Media Foundation. Esas características se han optimizado para Windows 10 y Windows 11. Microsoft recomienda encarecidamente que el nuevo código use MediaPlayer, IMFMediaEngine y Audio/Video Capture en Media Foundation en lugar de DirectShow, siempre que sea posible. Microsoft sugiere que el código existente que usa las API heredadas se reescriba para usar las nuevas API si es posible.
Una página de propiedades es una manera de que un filtro admita las propiedades que el usuario puede establecer. En este artículo se describe cómo mostrar las páginas de propiedades de un filtro en una aplicación. Para obtener más información sobre las páginas de propiedades, consulte la documentación del SDK de plataforma.
Nota:
Aunque muchos de los filtros proporcionados con DirectShow admiten páginas de propiedades, están pensadas para fines de depuración y no se recomiendan para el uso de aplicaciones. En la mayoría de los casos, la funcionalidad equivalente se proporciona a través de una interfaz personalizada en el filtro. Una aplicación debe controlar estos filtros mediante programación, en lugar de exponer sus páginas de propiedades a los usuarios.
Los filtros con páginas de propiedades exponen la interfaz ISpecifyPropertyPages . Para determinar si un filtro define una página de propiedades, consulte el filtro de esta interfaz mediante QueryInterface.
Si creó directamente una instancia de un filtro (llamando a CoCreateInstance), ya tiene un puntero al filtro. Si no es así, puede enumerar los filtros del gráfico mediante el método IFilterGraph::EnumFilters . Para obtener más información, vea Enumerar objetos en un gráfico de filtros.
Una vez que tenga el puntero de interfaz ISpecifyPropertyPages , recupere las páginas de propiedades del filtro llamando al método ISpecifyPropertyPages::GetPages . Este método rellena una matriz contada de identificadores únicos globales (GUID) con el identificador de clase (CLSID) de cada página de propiedades. Una matriz con recuento se define mediante una estructura CAUUID , que debe asignar, pero no tiene que inicializarse. El método GetPages asigna la matriz, que se encuentra en el miembro pElems de la estructura CAUUID . Cuando haya terminado, libere la matriz llamando a la función CoTaskMemFree .
La función OleCreatePropertyFrame proporciona una manera sencilla de mostrar las páginas de propiedades dentro de un cuadro de diálogo modal.
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);
}
Temas relacionados