Поделиться через


Подключаемый модуль страницы свойств

Вы можете предоставить пользовательский интерфейс для свойств устройства, написав страницу свойств в качестве подключаемого модуля для прокси-сервера 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 .