Реализация активации на месте
Активация на месте позволяет пользователю взаимодействовать с внедренным объектом без выхода из документа контейнера. Когда пользователь активирует объект, составная строка меню, содержащая элементы из строк меню приложения контейнера и серверного приложения, заменяет главную строку меню контейнера. Таким образом, команды и функции обоих приложений доступны пользователю, включая контекстную справку для активного объекта. Когда пользователь начинает работать с не объектной частью документа, объект деактивируется, что приводит к восстановлению первоначального меню документа-контейнера вместо составного меню.
Эта возможность изначально называлась редактированием на месте. Имя было изменено, так как изменение является одним из способов взаимодействия пользователя с запущенным объектом. Звуковые клипы, например, можно прослушивать вместо редактирования. Видеоклипы можно просматривать вместо редактирования. Использование на месте особенно уместно в случае видеоклипов, так как позволяет воспроизводить их на месте без открытия отдельного окна. Это может быть важно, если видео должно быть просмотрировано, скажем, в сочетании с смежными текстовыми данными в документе контейнера.
Реализация активации на месте является строго необязательной для приложений контейнеров и серверов. OLE по-прежнему поддерживает модель, в которой активация объекта приводит к открытию отдельного окна серверным приложением. Связанные объекты всегда открываются в отдельном окне, чтобы подчеркнуть, что они находятся в отдельном документе.
Активация на месте начинается с объекта в ответ на вызов IOleObject::DoVerb из контейнера. Этот вызов обычно происходит в ответ на двойной щелчок по объекту или выбор команды в меню «Правка» в приложении-контейнере.
Окно на месте получает ввод клавиатуры и мыши в то время как внедренный объект активен. Когда пользователь выбирает команды из составной строки меню, команда и связанные сообщения меню отправляются в контейнер или приложение объектов в зависимости от того, какой из них принадлежит определенному раскрывающемся меню. Входные данные через линейки, панели инструментов или оформление рамки объекта поступают непосредственно во встроенный объект, который владеет этими окнами.
Встроенный объект, активируемый в процессе, остается активным до тех пор, пока контейнер не деактивирует его в ответ на действие пользователя или объект добровольно не откажется от активного состояния, например, как это может сделать видеоклип. Пользователь может отключить объект, щелкнув внутри документа контейнера, но за пределами окна активации объекта или просто щелкнув другой объект. Однако активируемый на месте объект остается активным, если пользователь щелкает заголовок контейнера, полосу прокрутки или, в частности, строку меню.
Сервер с объектом активации на месте можно реализовать как внутрипроцессный сервер (DLL) или локальный сервер (EXE). В обоих случаях составная строка меню содержит элементы (обычно раскрывающееся меню) как из процессов сервера, так и контейнера. В случае внутрипроцессного сервера окно активации на месте — это просто очередное дочернее окно в иерархии окон контейнера, получающее входные данные через цикл обработки сообщений приложения контейнера.
В случае локального сервера окно активации на месте принадлежит процессу приложения сервера внедренного объекта, но его родительское окно принадлежит контейнеру. Входные данные для окна активации на месте отображаются в очереди сообщений сервера и отправляются циклом сообщений сервера. Библиотеки OLE отвечают за обеспечение правильной отправки команд и сообщений меню.
Связанные темы