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


Серверы: элементы сервера

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

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

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

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

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

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

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

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

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

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

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

Рекомендация по архитектуре Server-Item

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

См. также

Серверы