Complemento de página de propiedades
Puede proporcionar una interfaz de usuario a las propiedades del dispositivo escribiendo una página de propiedades como complemento para el proxy KS. En este tema se explica cómo escribir este complemento. En primer lugar, registre el objeto tal y como se describe en Registro de complementos de proxy KS.
A continuación, declare la plantilla de fábrica para el filtro. Una plantilla de fábrica es una clase de C++ que contiene información para el generador de clases.
En el archivo DLL, declare una matriz global de objetos CFactoryTemplate, uno para cada filtro o componente COM del archivo DLL. Si solo tiene una página de propiedades, cree solo un objeto en la matriz.
Para cada objeto, genere un GUID para el identificador de clase (CLSID) y proporcione una entrada en la declaración.
La matriz debe denominarse g_Templates:
CFactoryTemplate g_Templates[] =
{
{
L"My Property Page",
&CLSID_MyPropPage),
CMyPropPage::CreateInstance,
NULL,
NULL
},
};
La página de propiedades debe derivar de la clase CBasePropertyPage y debe invalidar varios de los 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 la página de propiedades, la hoja de propiedades de hospedaje llama a IPropertyPage::SetPageSite. Esta llamada da como resultado una llamada del método OnConnect del complemento. En el momento de esta llamada, la página de propiedades se ha conectado al filtro, pero la página de propiedades aún no se ha mostrado.
El parámetro proporcionado en la llamada a OnConnect es la interfaz al proxy KS, que luego se puede consultar para un puntero a IKsPropertySet. A continuación, puede llamar a IKsPropertySet::Get e IKsPropertySet::Set para manipular las propiedades expuestas del controlador.
También debe proporcionar un método CreateInstance . El sistema invoca el método de una página de propiedades para crear una instancia de la página de propiedades. Este método debe llamar al constructor de la clase para crear una instancia de ella.
El constructor recibe un puntero a la interfaz desconocida externa, que en este caso es el proxy KS.
Se llama al método OnDisconnect de la página de propiedades cuando la página de propiedades debe liberar el objeto asociado. Esta devolución de llamada debe disminuir el recuento de referencias en el puntero a la interfaz al proxy KS llamando a su método Release .