Compartilhar via


Plug-in da página de propriedades

Você pode fornecer uma interface do usuário para propriedades do dispositivo escrevendo uma página de propriedades como um plug-in para proxy KS. Este tópico explica como escrever um plug-in desse tipo. Primeiro, registre o objeto conforme descrito em Registrar plug-ins de proxy KS.

Em seguida, declare o modelo de fábrica para o filtro. Um modelo de fábrica é uma classe C++ que contém informações para a fábrica de classes.

Em sua DLL, declare uma matriz global de objetos CFactoryTemplate, uma para cada filtro ou componente COM em sua DLL. Se você tiver apenas uma página de propriedades, crie apenas um objeto na matriz.

Para cada objeto, gere um GUID para o CLSID (identificador de classe) e forneça uma entrada na declaração.

A matriz deve ser nomeada g_Templates:

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

Sua página de propriedades deve derivar da classe CBasePropertyPage e deve substituir vários dos métodos de 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 );
};

Para inicializar a página de propriedades, a folha de propriedades de hospedagem chama IPropertyPage::SetPageSite. Essa chamada resulta em uma chamada do método OnConnect do plug-in. No momento dessa chamada, a página de propriedades foi conectada ao filtro, mas a página de propriedades ainda não foi exibida.

O parâmetro fornecido na chamada para OnConnect é a interface para o proxy KS, que pode ser consultada para um ponteiro para IKsPropertySet. Em seguida, você pode chamar IKsPropertySet::Get e IKsPropertySet::Set para manipular as propriedades expostas do driver.

Você também deve fornecer um método CreateInstance . O sistema invoca o método de uma página de propriedades para criar uma instância da página de propriedades. Esse método deve chamar o construtor da classe para instanciá-lo.

O construtor recebe um ponteiro para a interface desconhecida externa, que nesse caso é o proxy KS.

O método OnDisconnect da página de propriedades é chamado quando a página de propriedades deve liberar o objeto associado. Esse retorno de chamada deve diminuir a contagem de referência no ponteiro para a interface para o proxy KS chamando seu método Release .