Подключаемый модуль страницы свойств
Вы можете предоставить пользовательский интерфейс для свойств устройства, написав страницу свойств в качестве подключаемого модуля для прокси-сервера KS. В этом разделе объясняется, как написать такой подключаемый модуль. Сначала зарегистрируйте объект, как описано в разделе Регистрация подключаемых модулей прокси-сервера KS.
Затем объявите шаблон фабрики для фильтра. Шаблон фабрики — это класс C++, содержащий сведения о фабрике класса.
В библиотеке DLL объявите глобальный массив объектов CFactoryTemplate, по одному для каждого фильтра или com-компонента в библиотеке DLL. Если у вас есть только одна страница свойств, создайте только один объект в массиве.
Для каждого объекта создайте ИДЕНТИФИКАТОР GUID для идентификатора класса (CLSID) и укажите запись в объявлении.
Массив должен иметь имя 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::Get и IKsPropertySet::Set для управления предоставленными свойствами драйвера.
Необходимо также предоставить метод CreateInstance . Система вызывает метод страницы свойств для создания экземпляра страницы свойств. Этот метод должен вызывать конструктор класса , чтобы создать его экземпляр.
Конструктор получает указатель на внешний неизвестный интерфейс, который в данном случае является прокси-сервером KS.
Метод OnDisconnect страницы свойств вызывается, когда страница свойств должна освободить связанный объект. Этот обратный вызов должен уменьшать количество ссылок в указателе на интерфейс к прокси-серверу KS путем вызова его метода Release .