Реализация активации In-Place

Встроенная активация позволяет пользователю взаимодействовать с внедренным объектом, не открывая документ контейнера. Когда пользователь активирует объект, в составной строке меню, включающей элементы из панелей меню приложения-контейнера и сервера, заменяется Главная строка меню контейнера. Доступ к командам и функциям обоих приложений предоставляется пользователю, включая контекстную справку для активного объекта. Когда пользователь начинает работать с какой-либо частью документа, не относящимся к объекту, объект деактивируется, в результате чего в исходном меню документа-контейнера заменяется составное меню.

Эта возможность изначально была изменена именем на месте. Имя было изменено, так как редактирование является одним из способов взаимодействия пользователя с запущенным объектом. Например, звуковые клипы можно прослушивать вместо редактирования. Видеоклипы можно просматривать вместо редактирования. Активация на месте особенно APT в случае видеороликов, так как она позволяет запускать их на месте, не вызывая отдельное окно. Это может быть критическим, если видео было просмотрено, скажем, в сочетании с соседними текстовыми данными в документе контейнера.

Реализация встроенной активации является исключительно необязательной для контейнеров и серверных приложений. OLE по-прежнему поддерживает модель, в которой активация объекта приводит к тому, что серверное приложение открывает отдельное окно. Связанные объекты всегда открываются в отдельном окне, чтобы подчеркнуть, что они находятся в отдельном документе.

Активация на месте начинается с объекта в ответ на вызов иолеобжект::D оверб из своего контейнера. Этот вызов обычно происходит в ответ на то, что пользователь дважды щелкает объект или выбирает команду (глагол) в меню редактирования приложения-контейнера.

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

Внедренный объект, активированный на месте, остается активным до тех пор, пока контейнер не деактивирует его в ответ на вводимые пользователем данные, или объект добровольно придает активное состояние, как, например, видеоролик. Пользователь может деактивировать объект, щелкнув его внутри документа контейнера, но за пределами окна «на месте» объекта или просто щелкнув другой объект. Объект, активируемый на месте, остается активным, но если пользователь щелкает строку заголовка контейнера, полосу прокрутки или, в частности, строку меню.

Можно реализовать сервер обработки на месте в качестве внутрипроцессного сервера (DLL) или локального сервера (EXE). В обоих случаях составная строка меню содержит элементы (обычно раскрывающиеся меню) из процессов сервера и контейнера. В случае внутрипроцессного сервера окно активации на месте — это просто другое дочернее окно в иерархии окон контейнера, получающее входные данные через конвейер сообщений приложения-контейнера.

В случае с локальным сервером окно активации на месте относится к процессу серверного приложения внедренного объекта, но его родительское окно принадлежит контейнеру. Входные данные для окна "на месте" отображаются в очереди сообщений сервера и отправляются циклом обработки сообщений сервера. Библиотеки OLE отвечают за то, что команды меню и сообщения отправляются правильно.

Составные документы