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

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

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

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

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

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

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

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

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

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