Реализация активации на месте

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

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

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

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

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

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

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

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

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