CBasePropertyPage 클래스

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

cbasepropertypage 클래스 계층 구조

클래스는 CBasePropertyPage 속성 페이지를 구현하기 위한 추상 클래스입니다. 속성 페이지를 지원하는 필터(또는 다른 개체)를 작성하는 경우 이 클래스를 사용합니다.

보호된 멤버 변수 Description
m_bDirty 속성이 변경되었는지 여부를 나타냅니다.
m_DialogId 대화 상자의 리소스 식별자입니다.
m_Dlg 대화 상자 창에 대한 핸들입니다.
M_hwnd 대화 상자 창에 대한 핸들입니다.
m_pPageSite 속성 페이지 사이트의 IPropertyPageSite 인터페이스에 대한 포인터입니다.
m_TitleId 대화 상자 제목이 포함된 문자열의 리소스 식별자입니다.
Public 메서드 Description
CBasePropertyPage 생성자 메서드입니다.
~CBasePropertyPage 소멸자 메서드입니다. 가상.
OnActivate 속성 페이지가 활성화될 때 호출됩니다. 가상.
OnApplyChanges 사용자가 속성 페이지에 변경 내용을 적용할 때 호출됩니다. 가상.
OnConnect 속성 페이지와 연결된 개체에 대한 IUnknown 포인터를 제공합니다. 가상.
OnDeactivate 대화 상자 창이 제거되면 호출됩니다. 가상.
OnDisconnect 속성 페이지에서 연결된 개체를 해제해야 하는 경우 호출됩니다. 가상.
OnReceiveMessage 대화 상자에서 메시지를 받을 때 호출됩니다. 가상.
IPropertyPage 메서드 Description
활성화 대화 상자 창을 만듭니다.
적용 속성 페이지와 연결된 개체에 현재 속성 페이지 값을 적용합니다.
비활성화 대화 상자 창을 삭제합니다.
GetPageInfo 속성 페이지에 대한 정보를 검색합니다.
도움말 속성 페이지 도움말을 호출합니다.
IsPageDirty 속성 페이지가 활성화된 이후 또는 IPropertyPage::Apply에 대한 가장 최근 호출 이후 변경되었는지 여부를 나타냅니다.
이동 대화 상자의 위치를 지정하고 크기를 조정합니다.
SetObjects 속성 페이지와 연결된 개체에 대한 IUnknown 포인터를 제공합니다.
SetPageSite 속성 페이지를 초기화합니다.
표시 대화 상자를 표시하거나 숨깁니다.
TranslateAccelerator 속성 페이지에 키 입력을 처리하도록 지시합니다.

설명

속성 페이지는 COM 개체이므로 CLSID(클래스 식별자)에 대한 GUID를 생성하고 CFactoryTemplate 배열에 항목을 제공해야 합니다. 자세한 내용은 DirectShow 및 COM을 참조하세요. 다음 예제에서는 일반적인 클래스 팩터리 항목을 보여 줍니다.

CFactoryTemplate g_Templates[] =
{   
    { 
        L"My Property Page",
        &CLSID_MyPropPage,
        CMyProp::CreateInstance,
        NULL,
        NULL
    },
    /* Also include the template for your filter (not shown). */
};

필터는 ISpecifyPropertyPages 인터페이스를 노출해야 합니다. 이 인터페이스에는 속성 페이지의 CLSID를 반환하는 단일 메서드 GetPages가 포함되어 있습니다. 다음 예제에서는 이 메서드를 구현하는 방법을 보여줍니다.

STDMETHODIMP CMyFilter::GetPages(CAUUID *pPages)
{
    if (!pPages) return E_POINTER;

    pPages->cElems = 1;
    pPages->pElems = reinterpret_cast<GUID*>(CoTaskMemAlloc(sizeof(GUID)));
    if (pPages->pElems == NULL) 
    {
        return E_OUTOFMEMORY;
    }
    *(pPages->pElems) = CLSID_MyPropPage;
    return S_OK;
} 

필터의 NonDelegatingQueryInterface 메서드도 재정의해야 합니다. 자세한 내용은 DirectShow 및 COM 및INonDelegatingUnknown을 참조하세요.

다음으로, 프로젝트에서 대화 상자를 리소스로 만들고 대화 상자 제목을 포함하는 문자열 리소스를 만듭니다. 이러한 리소스 ID는 모두 CBasePropertyPage 생성자에 대한 매개 변수입니다. 타이틀 문자열을 리소스에 유지하면 속성 페이지를 쉽게 지역화할 수 있습니다.

CBasePropertyPage 클래스는 IPropertyPage 인터페이스에 대한 프레임워크를 제공합니다. 이 프레임워크는 CBasePropertyPage::OnActivate, CBasePropertyPage::OnApplyChanges 등을 비롯한 다양한 가상 메서드를 호출합니다. 기본 클래스에서 이러한 메서드는 단순히 S_OK 반환합니다. 파생 클래스는 이러한 가상 메서드의 일부 또는 전체를 재정의해야 합니다. 자세한 내용은 개별 메서드에 대한 설명을 참조하세요.

이 클래스를 사용하여 속성 페이지를 만드는 방법에 대한 확장 예제는 필터 속성 페이지 만들기를 참조하세요.

요구 사항

요구 사항
헤더
Cprop.h(Streams.h 포함)
라이브러리
Strmbase.lib(소매 빌드);
Strmbasd.lib(디버그 빌드)