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


Контейнеры. Дополнительные возможности

В этой статье описаны шаги, необходимые для включения дополнительных дополнительных функций в существующие приложения контейнеров. Ниже приведены следующие функции:

Создание приложения контейнера или сервера

Приложение контейнера или сервера — это приложение, которое выступает как в качестве контейнера, так и сервера. 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 на внедренный объект в приложении контейнера. Например, создайте документ в текстовом процессоре, содержав внедренную электронную таблицу. Если приложение поддерживает ссылки на внедренные объекты, оно может вставить ссылку на электронную таблицу, содержащуюся в документе обработчика слов. Эта функция позволяет приложению использовать сведения, содержащиеся в электронной таблице, не зная, где обработчик слов изначально получил его.

  1. Наследуйте класс документа вместо COleLinkingDoc COleDocument.

  2. Создайте идентификатор класса OLE (CLSID) для приложения с помощью генератора идентификаторов классов, включенных в средства разработки OLE.

  3. Зарегистрируйте приложение с помощью OLE.

  4. COleTemplateServer Создайте объект в качестве члена класса приложения.

  5. В функции-члене класса InitInstance приложения выполните следующие действия:

    • Подключение объект COleTemplateServer в шаблоны документов путем вызова функции-члена объектаConnectTemplate.

    • Вызовите функцию-член, COleTemplateServer::RegisterAll чтобы зарегистрировать все объекты класса в системе OLE.

    • Вызовите процедуру COleTemplateServer::UpdateRegistry. Единственный параметр UpdateRegistry должен быть OAT_CONTAINER , если приложение не запускается с помощью переключателя /Embedded. Это регистрирует приложение в качестве контейнера, который может поддерживать ссылки на внедренные объекты.

      Если приложение запускается с помощью переключателя "/Embedded", оно не должно отображать свое главное окно, как и серверное приложение.

Пример OCLIENT OCLIENT MFC реализует эту функцию. Пример этого выполнения см InitInstance . в функции В OCLIENT. CPP-файл этого примера приложения.

См. также

Контейнеры
Серверы