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


Серверы. Элементы сервера

Когда контейнер запускает сервер, чтобы пользователь смог изменить внедренный или связанный элемент OLE, серверное приложение создает "элемент сервера". Серверный элемент, являющийся объектом класса, производным от COleServerItemкласса, предоставляет интерфейс между серверным документом и приложением контейнера.

Класс COleServerItem определяет несколько переопределенных функций-членов, вызываемых OLE, обычно в ответ на запросы из контейнера. Элементы сервера могут представлять часть документа сервера или весь документ. При внедрении элемента OLE в документ контейнера элемент сервера представляет весь серверный документ. При связывании элемента OLE элемент сервера может представлять часть документа сервера или весь документ в зависимости от того, является ли ссылка частью или целым.

Например, в примере HIERSVR класс CServerItemэлемента сервера имеет элемент, который является указателем на объект классаCServerNode. Объект CServerNode — это узел в документе приложения HIERSVR, который является деревом. CServerNode Если объект является корневым узлом, CServerItem объект представляет весь документ. CServerNode Если объект является дочерним узлом, CServerItem объект представляет часть документа. Пример этого взаимодействия см. в примере OLE OLE MFC HIERSVR .

Реализация элементов сервера

Если вы используете мастер приложений для создания начального кода для приложения, все, что необходимо сделать, чтобы включить элементы сервера в начальный код, — выбрать один из параметров сервера на странице параметров OLE. Если вы добавляете элементы сервера в существующее приложение, выполните следующие действия.

Реализация элемента сервера

  1. Создайте производный класс от класса COleServerItem.

  2. В производном классе переопределите функцию-член OnDraw .

    Платформа вызывает отрисовку OnDraw элемента OLE в метафайл. Приложение контейнера использует этот метафайл для отрисовки элемента. Класс представления приложения также имеет OnDraw функцию-член, которая используется для отрисовки элемента при активном серверном приложении.

  3. Реализуйте переопределение OnGetEmbeddedItem для класса server-document. Дополнительные сведения см. в статье "Серверы: реализация документов сервера и пример OLE MFC HIERSVR".

  4. Реализуйте функцию-член класса OnGetExtent элемента сервера. Платформа вызывает эту функцию для получения размера элемента. Реализация по умолчанию не выполняет никаких действий.

Совет по архитектуре элементов сервера

Как отмечалось в разделе "Реализация элементов сервера", серверные приложения должны иметь возможность отрисовки элементов как в представлении сервера, так и в метафайле, используемом приложением контейнера. В архитектуре приложения библиотеки классов Microsoft Foundation функция-член класса OnDraw представления отображает элемент при его редактировании (см. раздел CView::OnDraw в справочнике по библиотеке классов). Элемент OnDraw сервера отображает элемент в метафайле во всех других случаях (см. раздел COleServerItem::OnDraw).

Вы можете избежать дублирования кода, написав вспомогательные функции в классе серверных документов и вызывая их из OnDraw функций в представлениях и классах элементов сервера. Пример OLE MFC HIERSVR использует эту стратегию: функции CServerView::OnDraw и CServerItem::OnDraw вызов для CServerDoc::DrawTree отрисовки элемента.

Представление и элемент имеют OnDraw функции-члены, так как они рисуются в разных условиях. Представление должно учитывать такие факторы, как масштабирование, размер выделения и экстент, вырезка и элементы пользовательского интерфейса, такие как полосы прокрутки. С другой стороны, элемент сервера всегда рисует весь объект OLE.

Дополнительные сведения см. в разделе CView::OnDraw, COleServerItem, COleServerItem::OnDraw и COleServerDoc::OnGetEmbeddedItem в справочнике по библиотеке классов.

См. также

Серверы