Контейнеры. Дополнительные возможности
В этой статье описаны шаги, необходимые для включения дополнительных дополнительных функций в существующие приложения контейнеров. Ниже приведены следующие функции:
Создание приложения контейнера или сервера
Приложение контейнера или сервера — это приложение, которое выступает как в качестве контейнера, так и сервера. Microsoft Word для Windows является примером этого. Вы можете внедрить документы Word для Windows в другие приложения, а также внедрить элементы в документы Word для Windows. Процесс изменения приложения контейнера как контейнера, так и полного сервера (невозможно создать сочетание контейнера или минисерверного приложения) аналогичен процессу создания полного сервера.
В статье "Серверы: реализация сервера " содержит ряд задач, необходимых для реализации серверного приложения. При преобразовании приложения-контейнера в приложение контейнера или сервера необходимо выполнить некоторые из этих же задач, добавив код в контейнер. Ниже перечислены важные моменты, которые следует учитывать.
Код контейнера, созданный мастером приложений, уже инициализирует подсистему OLE. Вам не нужно изменять или добавлять какие-либо изменения для этой поддержки.
Где бы ни был
COleDocument
базовый класс класса документов, измените базовый классCOleServerDoc
на .Переопределите
COleClientItem::CanActivate
, чтобы избежать изменения элементов на месте, пока сам сервер используется для изменения на месте.Например, в примере OCLIENT для MFC внедрен элемент, созданный приложением контейнера или сервера. Откройте приложение OCLIENT и на месте измените элемент, созданный приложением контейнера или сервера. При редактировании элемента приложения вы решите внедрить элемент, созданный примером OLE MFC HIERSVR. Для этого нельзя использовать активацию на месте. Чтобы активировать этот элемент, необходимо полностью открыть HIERSVR. Так как библиотека классов Microsoft Foundation не поддерживает эту функцию 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", оно не должно отображать свое главное окно, как и серверное приложение.
Пример OCLIENT OCLIENT MFC реализует эту функцию. Пример этого выполнения см InitInstance
. в функции В OCLIENT. CPP-файл этого примера приложения.