DirectShow DirectShow 레퍼런스 DirectShow base class base class 레퍼런스 CBasePropertyPage [목차열람] [주소복사] [슬롯비우기] |
Microsoft DirectX 9.0 |
CBasePropertyPage 클래스는 프로퍼티 페이지를 처리 하는 추상 클래스이다. 프로퍼티 페이지를 지원 하는 필터 (또는 그 외의 개체)를 쓰는 경우는, 이 클래스를 사용한다.
프로퍼티 페이지는 COM 개체이기 (위해)때문에, 클래스 식별자 (CLSID)의 GUID 를 생성해,CFactoryTemplate 배열의 엔트리를 지정할 필요가 있다. 더 자세한 정보는, 「DirectShow 와 COM 」를 참조할것. 다음의 예는 전형적인 클래스 팩토리의 엔트리를 나타내고 있다.
CFactoryTemplate g_Templates[] =
{
{
L"My Property Page",
&CLSID_MyPropPage,
CMyProp::CreateInstance,
NULL,
NULL
},
/* 필터용의 템플릿도 추가한다 (생략). */
};
필터는 ISpecifyPropertyPages 인터페이스를 공개할 필요가 있다. 이 인터페이스에는 GetPages 라고 하는 1 개의 메서드가 있다. 이 메서드는 프로퍼티 페이지의 CLSID 를 돌려준다. 다음 코드는, 이 메서드의 처리 방법의 예이다.
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 메서드도 잊지 않고 오버라이드(override) 하는 것. 더 자세한 정보는, 「DirectShow 와 COM 」 및 「INonDelegatingUnknown 」를 참조할것.
다음에, 프로젝트의 리소스로서 다이얼로그를 생성 해, 다이얼로그의 타이틀을 보관 유지하는 캐릭터 라인 리소스를 생성 한다. 이러한 리소스 ID 는 양쪽 모두 CBasePropertyPage 생성자의 파라미터이다. 리소스로 타이틀 캐릭터 라인을 보관 유지 하면, 프로퍼티 페이지의 로컬라이즈를 간단하게 실시할 수 있다.
CBasePropertyPage 클래스는 IPropertyPage 인터페이스의 프레임워크(framework)를 제공한다. 이 프레임워크(framework)는,CBasePropertyPage::OnActivate 나 CBasePropertyPage::OnApplyChanges 등의 다수의 가상 메서드를 호출한다. base class에서는, 이러한 메서드는 다만 S_OK 를 돌려주는 것만으로 있다. 상속 클래스에서는, 이러한 가상 메서드의 일부 또는 전부를 오버라이드(override) 할 필요가 있다. 더 자세한 정보는, 각각의 메서드의 「주의」를 참조할것.
요건
헤더 : Cprop.h 로 선언해, Streams.h 를 인클루드 한다.
라이브러리 : Strmbase.lib (리테일 빌드) 또는 Strmbasd.lib (디버그 빌드).
프로텍트 멤버 변수 | |
m_bDirty | 변경된 프로퍼티가 있을지 어떨지를 나타낸다. |
m_DialogId | 다이얼로그의 리소스 식별자. |
m_Dlg | 다이얼로그 윈도우의 핸들. |
m_hwnd | 다이얼로그 윈도우의 핸들. |
m_pPageSite | 프로퍼티 페이지 사이트의 IPropertyPageSite 인터페이스의 포인터. |
m_TitleId | 다이얼로그의 타이틀을 저장 하고 있는 캐릭터 라인의 리소스 식별자. |
퍼블릭 메서드 | |
CBasePropertyPage | 생성자 메서드. |
~CBasePropertyPage | 소멸자 메서드. 가상. |
OnActivate | 프로퍼티 페이지가 액티브하게 되었을 때 호출된다. 가상. |
OnApplyChanges | 사용자가 프로퍼티 페이지에 대한 변경을 적용했을 때 호출된다. 가상. |
OnConnect | 프로퍼티 페이지에 관련된 개체에의 IUnknown 포인터. 가상. |
OnDeactivate | 다이알로그 박스 윈도우가 파기되었을 때 호출된다. 가상. |
OnDisconnect | 프로퍼티 페이지를 관련지을 수 있었던 개체를 릴리즈 할 필요가 있는 경우에 호출된다. 가상. |
OnReceiveMessage | 다이알로그 박스가 메시지를 받아들였을 때 호출된다. 가상. |
IPropertyPage 메서드 | |
Activate | 다이알로그 박스 윈도우를 생성 한다. |
Apply | 현재의 프로퍼티 페이지값을 프로퍼티 페이지에 관련된 개체에 적용한다. |
Deactivate | 다이얼로그 윈도우를 파기한다. |
GetPageInfo | 프로퍼티 페이지에 관한 정보를 얻어온다. |
Help | 프로퍼티 페이지의 헬프를 호출한다. |
IsPageDirty | 프로퍼티 페이지가 액티브하게 된 후, 또는 IPropertyPage::Apply 를 마지막으로 호출한 후, 변경되었는지 어떠했는지를 나타낸다. |
Move | 다이알로그 박스의 배치와 사이즈 변경을 실시한다. |
SetObjects | 프로퍼티 페이지에 관련된 개체의 IUnknown 포인터를 제공한다. |
SetPageSite | 프로퍼티 페이지를 초기화한다. |
Show | 다이알로그 박스의 표시/비표시를 바꾼다. |
TranslateAccelerator | 키스트로크(keystroke)의 처리를 프로퍼티 페이지에 지시한다. |