Поделиться через


Метод IOleInPlaceObjectWindowless::GetDropTarget (ocidl.h)

Извлекает интерфейс IDropTarget для активного объекта без окон на месте, поддерживающего перетаскивание.

Синтаксис

HRESULT GetDropTarget(
  [out] IDropTarget **ppDropTarget
);

Параметры

[out] ppDropTarget

Указатель на переменную указателя IDropTarget , которая получает указатель интерфейса на объект без окон.

Возвращаемое значение

Этот метод возвращает значение S_OK при успешном завершении. Другие возможные возвращаемые значения включают следующее.

Код возврата Описание
E_NOTIMPL
Объект без окна не поддерживает перетаскивание.

Комментарии

Оконный объект регистрирует интерфейс 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 , чтобы указать, что он не принимает ни один из форматов данных в объекте данных. В этом случае контейнер может принять данные для себя и вернуть соответствующий dwEffect из собственных методов IDropTarget::D ragEnter или IDropTarget::D ragOver .

Объект, возвращающий 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

См. также раздел

IDropTarget

IOleInPlaceObjectWindowless

IPointerInactive::GetActivationPolicy

RegisterDragDrop