Метод IOleInPlaceObjectWindowless::GetDropTarget (ocidl.h)
Извлекает интерфейс IDropTarget для активного объекта без окон на месте, поддерживающего перетаскивание.
Синтаксис
HRESULT GetDropTarget(
[out] IDropTarget **ppDropTarget
);
Параметры
[out] ppDropTarget
Указатель на переменную указателя IDropTarget , которая получает указатель интерфейса на объект без окон.
Возвращаемое значение
Этот метод возвращает значение S_OK при успешном завершении. Другие возможные возвращаемые значения включают следующее.
Код возврата | Описание |
---|---|
|
Объект без окна не поддерживает перетаскивание. |
Комментарии
Оконный объект регистрирует интерфейс IDropTarget , вызывая функцию RegisterDragDrop и предоставляя свой дескриптор окна в качестве параметра. Регистрация интерфейса IDropTarget позволяет объекту участвовать в операциях перетаскивания. Так как у него нет активного окна, объект без окна не может зарегистрировать свой интерфейс IDropTarget . Таким образом, он не может напрямую участвовать в операциях перетаскивания без поддержки со стороны своего контейнера.
Во время операции перетаскивания с объектами без окон возникают следующие события:
- Контейнер регистрирует собственный интерфейс IDropTarget с помощью функции RegisterDragDrop.
- В реализации контейнера собственных методов IDropTarget::D ragEnter или IDropTarget::D ragOver контейнер определяет, вошел ли указатель мыши только что в внедренный объект.
- Если объект неактивен, контейнер вызывает метод объекта IPointerInactive::GetActivationPolicy . Объект возвращает флаг POINTERINACTIVE_ACTIVATEONDRAG. Затем контейнер активирует объект на месте. Если объект уже активен, контейнеру не нужно выполнять этот шаг.
- После того как объект активен, контейнер должен получить интерфейс IDropTarget объекта.
- Объект без окна, который должен быть целевым объектом удаления, по-прежнему реализует интерфейс IDropTarget , но не регистрирует его и не возвращает его через вызовы IUnknown::QueryInterface. Вместо этого контейнер может получить этот интерфейс, вызвав метод IOleInPlaceObjectWindowless::GetDropTarget объекта. Объект возвращает указатель на собственный интерфейс IDropTarget , если он хочет участвовать в операциях перетаскивания. Контейнер может кэшировать этот указатель интерфейса для последующего использования. Например, при последующих вызовах методов IDropTarget::D ragEnter или IDropTarget::D ragLeave контейнер может использовать кэшированный указатель вместо повторного вызова метода GetDropTarget объекта.
- Затем контейнер вызывает объект IDropTarget::D ragEnter и передает возвращаемое значение для pdwEffect из собственных методов IDropTarget::D ragOver или IDropTarget::D ragEnter . С этого момента контейнер перенаправит все последующие вызовы IDropTarget::D ragOver в объект без окон, пока мышь не покинет объект или не произойдет падение объекта. Если мышь покидает объект, контейнер вызывает IDropTarget::D ragLeave , а затем освобождает интерфейс IDropTarget объекта. Если происходит удаление, контейнер перенаправит вызов IDropTarget::D rop в объект .
- Наконец, контейнер на месте деактивирует объект .
Объект, возвращающий S_FALSE из IDropTarget::D ragEnter , должен быть подготовлен к приему последующих вызовов IDropTarget::D ragEnter без IDropTarget::D ragLeave между ними. Действительно, если указатель мыши по-прежнему находится над тем же объектом во время следующего вызова IDropTarget::D ragOver контейнера, контейнер может повторить попытку вызова IDropTarget::D ragEnter в объекте .
Примечания к вызывающим абонентам
Контейнер может кэшировать указатель на интерфейс IDropTarget объекта для последующего использования.Требования
Требование | Значение |
---|---|
Минимальная версия клиента | Windows 2000 Professional [только классические приложения] |
Минимальная версия сервера | Windows 2000 Server [только классические приложения] |
Целевая платформа | Windows |
Header | ocidl.h |