다음을 통해 공유


필터의 속성 페이지 표시

[이 페이지와 연결된 기능인 DirectShow는 레거시 기능입니다. MediaPlayer, IMFMediaEngine 및 Media Foundation의 오디오/비디오 캡처로 대체되었습니다. 이러한 기능은 Windows 10 및 Windows 11 최적화되었습니다. 가능한 경우 새 코드가 DirectShow 대신 Media Foundation에서 MediaPlayer, IMFMediaEngine오디오/비디오 캡처를 사용하는 것이 좋습니다. 가능한 경우 레거시 API를 사용하는 기존 코드를 다시 작성하여 새 API를 사용하도록 제안합니다.]

속성 페이지는 필터가 사용자가 설정할 수 있는 속성을 지원하는 한 가지 방법입니다. 이 문서에서는 애플리케이션에서 필터의 속성 페이지를 표시하는 방법을 설명합니다. 속성 페이지에 대한 자세한 내용은 플랫폼 SDK 설명서를 참조하세요.

참고

DirectShow 지원 속성 페이지와 함께 제공되는 많은 필터는 디버깅을 위한 것이며 애플리케이션 사용에는 권장되지 않습니다. 대부분의 경우 해당 기능은 필터의 사용자 지정 인터페이스를 통해 제공됩니다. 애플리케이션은 사용자에게 속성 페이지를 노출하는 대신 프로그래밍 방식으로 이러한 필터를 제어해야 합니다.

 

속성 페이지가 있는 필터는 ISpecifyPropertyPages 인터페이스를 노출합니다 . 필터가 속성 페이지를 정의하는지 여부를 확인하려면 QueryInterface를 사용하여 이 인터페이스에 대한 필터를 쿼리합니다.

CoCreateInstance를 호출하여 필터의 instance 직접 만든 경우 필터에 대한 포인터가 이미 있습니다. 그렇지 않은 경우 IFilterGraph::EnumFilters 메서드를 사용하여 그래프의 필터를 열거할 수 있습니다. 자세한 내용은 필터 그래프에서 개체 열거를 참조하세요.

ISpecifyPropertyPages 인터페이스 포인터가 있으면 ISpecifyPropertyPages::GetPages 메서드를 호출하여 필터의 속성 페이지를 검색합니다. 이 메서드는 GUID(Globally Unique Identifiers)의 계산된 배열을 각 속성 페이지의 CLSID(클래스 식별자)로 채웁니다. 계산된 배열은 할당해야 하지만 초기화할 필요는 없는 CAUUID 구조체에 의해 정의됩니다. GetPages 메서드는 CAUUID 구조체의 pElems 멤버에 포함된 배열을 할당합니다. 완료되면 CoTaskMemFree 함수를 호출하여 배열을 해제합니다.

OleCreatePropertyFrame 함수는 모달 대화 상자 내에 속성 페이지를 표시하는 간단한 방법을 제공합니다.

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

기본 DirectShow 작업