속성 페이지 플러그 인

속성 페이지를 KS 프록시용 플러그 인으로 작성하여 디바이스 속성에 사용자 인터페이스를 제공할 수 있습니다. 이 항목에서는 이러한 플러그 인을 작성하는 방법을 설명합니다. 먼저 KS 프록시 플러그 인 등록에 설명된 대로 개체를 등록합니다.

다음으로 필터에 대한 팩터리 템플릿을 선언합니다. 팩터리 템플릿은 클래스 팩터리에 대한 정보를 포함하는 C++ 클래스입니다.

DLL에서 DLL의 각 필터 또는 COM 구성 요소에 대해 하나씩 CFactoryTemplate개체의 전역 배열을 선언합니다. 속성 페이지가 하나만 있는 경우 배열에 하나의 개체만 만듭니다.

각 개체에 대해 CLSID(클래스 식별자)에 대한 GUID를 생성하고 선언에 항목을 제공합니다.

배열 이름은 g_Templates 지정해야 합니다.

CFactoryTemplate g_Templates[] =
{
    {
        L"My Property Page",
        &CLSID_MyPropPage),
        CMyPropPage::CreateInstance,
        NULL,
        NULL
    },
};

속성 페이지는 CBasePropertyPage 클래스에서 파생되어야 하며 CBasePropertyPage의 여러 메서드를 재정의해야 합니다.

class CMyPropPage: public CBasePropertyPage
{
public:
    // creation routine returns ptr to new prop pg as a CUnknown
    static CUnknown* CreateInstance( LPUNKNOWN piOuterUnknown, HRESULT* phResult );

    // overridden methods:
    HRESULT OnConnect( IUnknown *punk);
    HRESULT OnDisconnect();
    HRESULT OnApplyChanges();
    HRESULT OnActivate();
    HRESULT OnDeactivate();
    INT_PTR OnReceiveMessage( HWND hWnd, UINT uMsg, WPARAM wParam, LPARAM lParam );
private:
    CMyPropPage ( LPUNKNOWN piOuterUnknown );
};

속성 페이지를 초기화하기 위해 호스팅 속성 시트는 IPropertyPage::SetPageSite를 호출합니다. 이 호출은 플러그 인의 OnConnect 메서드를 호출합니다. 이 호출 시 속성 페이지가 필터에 연결되었지만 속성 페이지가 아직 표시되지 않았습니다.

OnConnect 호출에 제공된 매개 변수는 KS 프록시에 대한 인터페이스로, IKsPropertySet에 대한 포인터를 쿼리할 수 있습니다. 그런 다음 IKsPropertySet::GetIKsPropertySet::Set 를 호출하여 드라이버의 노출된 속성을 조작할 수 있습니다.

CreateInstance 메서드도 제공해야 합니다. 시스템은 속성 페이지의 메서드를 호출하여 속성 페이지의 instance 만듭니다. 이 메서드는 인스턴스화할 클래스의 생성자를 호출해야 합니다.

생성자는 외부 알 수 없는 인터페이스에 대한 포인터를 받습니다. 이 경우 KS 프록시입니다.

속성 페이지의 OnDisconnect 메서드는 속성 페이지에서 연결된 개체를 해제해야 할 때 호출됩니다. 이 콜백은 Release 메서드를 호출하여 인터페이스에 대한 포인터에서 KS 프록시에 대한 참조 수를 감소시켜야 합니다.