Контейнеры. Дополнительные возможности
В этом разделе описываются шаги, которые необходимо включать необязательные дополнительные функции в существующем приложение-контейнеры. Эти функции:
Приложение, которое является и контейнером, и сервер
Ссылка на объект OLE внедренному
Создание контейнера или серверное приложение
Контейнер или серверное приложение, действующий как контейнер, и как сервер. Microsoft Word Windows для этого образца. Можно внедрить ключевое слово Windows для документов в других приложениях, а также включить элементы в слове для документов Windows. Процесс для внесения изменений в приложение контейнера и контейнером, и полным сервером (нельзя создать приложение контейнера или miniserver сочетания) аналогичен процессу для создания полного сервера.
Раздел Серверы: Реализация сервера содержит несколько задач, необходимые снабдила серверное приложение. При преобразовании контейнерное приложение на контейнер или серверное приложение, необходимо выполнить некоторые из этих одних и тех же задач, добавление кода на контейнер. Ниже перечислены важные моменты, которые необходимо учитывать.
Код контейнера созданный мастером приложений уже инициализирует OLE подсистема. Не нужно изменять или добавлять к данной поддержки.
Где бы ни базовый класс класса документа COleDocument, изменить базовый класс в COleServerDoc.
Переопределите COleClientItem::CanActivate во избежание изменение элементов на месте, пока сервер сам используется для редактирования на месте.
Например, в примере MFC OCLIENT OLE внедрял элемент, созданный с контейнером/серверными приложениями. При открытии приложения и OCLIENT на месте имеется элемент, созданный с контейнером/серверными приложениями. При редактировании элемент приложения, следует решить, требуется внедрить элемент, созданный в примере MFC HIERSVR OLE. Это можно сделать не встроенная функция активация использования. Необходимо открыть полностью HIERSVR активировать этот элемент. Поскольку библиотеки Microsoft Foundation Class не поддерживает эту функцию OLE, переопределить COleClientItem::CanActivate позволяет для проверки этой ситуации и предотвращает возможную ошибку во время выполнения в приложении.
При создании нового приложения и требуется его в функции в качестве контейнера или серверное приложение, выберите этот параметр в диалоговом окне OLE в мастере приложений и этой поддержки будет создан автоматически. Дополнительные сведения см. в статье Общие сведения: Создание контейнера элементов управления ActiveX. Дополнительные сведения об образцах MFC см. в образцах MFC.
Обратите внимание, что нельзя вставить в приложение с интерфейсом MDI самостоятельно. Приложение, контейнер/сервер нельзя вставить на себя, если не будет SDI.
Ссылки на объекты во внедренные
Ссылки на функции внедренных объектов позволяют пользователю создать документ с OLE по ссылке к внедренному объект внутри данного приложения. Например, создайте документ в текстовом процессоре, содержащий внедренную электронную таблицу. Если приложение указател поддержки к внедренным объектам, оно может вставить ссылку к таблице, содержащейся в документе текстового процессора. Эта функция позволяет приложению использовать сведения, содержащиеся в электронной таблице без использования, текстовый процессор исходного получил его.
Связывание с внедренным объекты в приложении
Создайте производный класс из документа COleLinkingDoc вместо COleDocument.
Создайте идентификатор класса OLE (CLSID) для приложения с помощью генератора идентификаторов класса включенного с OLE средствами разработки.
Зарегистрируйте приложение с OLE.
Создайте объект COleTemplateServer как член класса приложения.
В функции-члене InitInstance класса приложения, выполните следующие действия:
Подключиться данный объект COleTemplateServer, к шаблонам документов, вызвав функцию-член ConnectTemplate объекта.
Вызовите функцию-член COleTemplateServer::RegisterAll для регистрации все объекты класса с OLE системой.
Вызов метода COleTemplateServer::UpdateRegistry. Единственным параметром в UpdateRegistry должен быть OAT_CONTAINER, если приложение не запускается с параметром «/Embedded». Это регистрирует приложение в качестве контейнера, который может указатели поддержки к внедренным объекты.
Если приложение запускается с параметром «/Embedded», оно не должно отображать его главного окна, аналогична серверному приложению.
В примере MFC OCLIENT OLE реализует эту функцию. Пример того, как это делается см. функцию InitInstance в файле OCLIENT.CPP этого примера приложения.