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