Серверы. Элементы сервера
Когда контейнер запускает сервер, чтобы пользователь смог изменить внедренный или связанный элемент OLE, серверное приложение создает "элемент сервера". Серверный элемент, являющийся объектом класса, производным от COleServerItem
класса, предоставляет интерфейс между серверным документом и приложением контейнера.
Класс COleServerItem
определяет несколько переопределенных функций-членов, вызываемых OLE, обычно в ответ на запросы из контейнера. Элементы сервера могут представлять часть документа сервера или весь документ. При внедрении элемента OLE в документ контейнера элемент сервера представляет весь серверный документ. При связывании элемента OLE элемент сервера может представлять часть документа сервера или весь документ в зависимости от того, является ли ссылка частью или целым.
Например, в примере HIERSVR класс CServerItem
элемента сервера имеет элемент, который является указателем на объект классаCServerNode
. Объект CServerNode
— это узел в документе приложения HIERSVR, который является деревом. CServerNode
Если объект является корневым узлом, CServerItem
объект представляет весь документ. CServerNode
Если объект является дочерним узлом, CServerItem
объект представляет часть документа. Пример этого взаимодействия см. в примере OLE OLE MFC HIERSVR .
Реализация элементов сервера
Если вы используете мастер приложений для создания начального кода для приложения, все, что необходимо сделать, чтобы включить элементы сервера в начальный код, — выбрать один из параметров сервера на странице параметров OLE. Если вы добавляете элементы сервера в существующее приложение, выполните следующие действия.
Реализация элемента сервера
Создайте производный класс от класса
COleServerItem
.В производном классе переопределите функцию-член
OnDraw
.Платформа вызывает отрисовку
OnDraw
элемента OLE в метафайл. Приложение контейнера использует этот метафайл для отрисовки элемента. Класс представления приложения также имеетOnDraw
функцию-член, которая используется для отрисовки элемента при активном серверном приложении.Реализуйте переопределение
OnGetEmbeddedItem
для класса server-document. Дополнительные сведения см. в статье "Серверы: реализация документов сервера и пример OLE MFC HIERSVR".Реализуйте функцию-член класса
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 в справочнике по библиотеке классов.