Partager via


Affichage des pages de propriétés d’un filtre

[La fonctionnalité associée à cette page, DirectShow, est une fonctionnalité héritée. Il a été remplacé par MediaPlayer, IMFMediaEngine et Audio/Video Capture dans Media Foundation. Ces fonctionnalités ont été optimisées pour Windows 10 et Windows 11. Microsoft recommande vivement au nouveau code d’utiliser MediaPlayer, IMFMediaEngine et La capture audio/vidéo dans Media Foundation au lieu de DirectShow, lorsque cela est possible. Microsoft suggère que le code existant qui utilise les API héritées soit réécrit pour utiliser les nouvelles API si possible.]

Une page de propriétés est un moyen pour un filtre de prendre en charge les propriétés que l’utilisateur peut définir. Cet article explique comment afficher les pages de propriétés d’un filtre dans une application. Pour plus d’informations sur les pages de propriétés, consultez la documentation du Kit de développement logiciel (SDK) de plateforme.

Notes

Bien que la plupart des filtres fournis avec DirectShow prennent en charge les pages de propriétés, ils sont destinés au débogage et ne sont pas recommandés pour l’utilisation de l’application. Dans la plupart des cas, la fonctionnalité équivalente est fournie via une interface personnalisée sur le filtre. Une application doit contrôler ces filtres par programmation au lieu d’exposer ses pages de propriétés aux utilisateurs.

 

Les filtres avec des pages de propriétés exposent l’interface ISpecifyPropertyPages . Pour déterminer si un filtre définit une page de propriétés, interrogez le filtre de cette interface à l’aide de QueryInterface.

Si vous avez créé directement une instance d’un filtre (en appelant CoCreateInstance), vous disposez déjà d’un pointeur vers le filtre. Si ce n’est pas le cas, vous pouvez énumérer les filtres dans le graphique à l’aide de la méthode IFilterGraph::EnumFilters . Pour plus d’informations, consultez Énumération d’objets dans un graphique de filtre.

Une fois que vous avez le pointeur d’interface ISpecifyPropertyPages , récupérez les pages de propriétés du filtre en appelant la méthode ISpecifyPropertyPages::GetPages . Cette méthode remplit un tableau compté d’identificateurs globaux uniques (GUID) avec l’identificateur de classe (CLSID) de chaque page de propriétés. Un tableau compté est défini par une structure CAUUID , que vous devez allouer, mais que vous n’avez pas à initialiser. La méthode GetPages alloue le tableau, qui est contenu dans le membre pElems de la structure CAUUID . Lorsque vous avez terminé, libérez le tableau en appelant la fonction CoTaskMemFree .

La fonction OleCreatePropertyFrame fournit un moyen simple d’afficher les pages de propriétés à l’intérieur d’une boîte de dialogue 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);
}

Tâches directshow de base