IOleInPlaceObjectWindowless::GetDropTarget-Methode (ocidl.h)

Ruft die IDropTarget-Schnittstelle für ein direktes aktives, fensterloses Objekt ab, das Drag and Drop unterstützt.

Syntax

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

Parameter

[out] ppDropTarget

Ein Zeiger auf eine IDropTarget-Zeigervariable , die den Schnittstellenzeiger auf das fensterlose Objekt empfängt.

Rückgabewert

Diese Methode gibt S_OK bei Erfolg zurück. Weitere mögliche Rückgabewerte:

Rückgabecode Beschreibung
E_NOTIMPL
Das fensterlose Objekt unterstützt das Ziehen und Ablegen nicht.

Hinweise

Ein Objekt mit Fenster registriert seine IDropTarget-Schnittstelle , indem es die RegisterDragDrop-Funktion aufruft und sein Fensterhandle als Parameter angibt. Durch die Registrierung der IDropTarget-Schnittstelle kann das Objekt an Drag and Drop-Vorgängen teilnehmen. Da es kein Fenster hat, wenn es aktiv ist, kann ein fensterloses Objekt seine IDropTarget-Schnittstelle nicht registrieren. Daher kann es nicht direkt an Drag-and-Drop-Vorgängen ohne Unterstützung aus seinem Container teilnehmen.

Die folgenden Ereignisse treten während eines Drag-and-Drop-Vorgangs mit fensterlosen Objekten auf:

  • Der Container registriert seine eigene IDropTarget-Schnittstelle über die RegisterDragDrop-Funktion .
  • In der Implementierung der eigenen IDropTarget::D ragEnter - oder IDropTarget::D ragOver-Methoden erkennt der Container, ob der Mauszeiger gerade ein eingebettetes Objekt eingegeben hat.
  • Wenn das Objekt inaktiv ist, ruft der Container die IPointerInactive::GetActivationPolicy-Methode des Objekts auf. Das -Objekt gibt das POINTERINACTIVE_ACTIVATEONDRAG-Flag zurück. Der Container aktiviert dann das Objekt an Ort und Stelle. Wenn das Objekt bereits aktiv war, muss der Container diesen Schritt nicht ausführen.
  • Nachdem das Objekt aktiv ist, muss der Container die IDropTarget-Schnittstelle des Objekts abrufen.
  • Ein fensterloses Objekt, das ein Ablageziel sein möchte, implementiert weiterhin die IDropTarget-Schnittstelle , registriert sie jedoch nicht und gibt es nicht über Aufrufe von IUnknown::QueryInterface zurück. Stattdessen kann der Container diese Schnittstelle abrufen, indem er die IOleInPlaceObjectWindowless::GetDropTarget-Methode des Objekts aufruft . Das Objekt gibt einen Zeiger auf seine eigene IDropTarget-Schnittstelle zurück, wenn es an Drag and Drop-Vorgängen teilnehmen möchte. Der Container kann diesen Schnittstellenzeiger zur späteren Verwendung zwischenspeichern. Beispielsweise kann der Container bei nachfolgenden Aufrufen der Methoden IDropTarget::D ragEnter oder IDropTarget::D ragLeave den zwischengespeicherten Zeiger verwenden, anstatt die GetDropTarget-Methode des Objekts erneut aufzurufen.
  • Der Container ruft dann die IDropTarget::D ragEnter-Methode des Objekts auf und übergibt den zurückgegebenen Wert für pdwEffect von seiner eigenen IDropTarget::D ragOver- oder IDropTarget::D ragEnter-Methode . Ab diesem Zeitpunkt leitet der Container alle nachfolgenden IDropTarget::D ragOver-Aufrufe an das fensterlose Objekt weiter, bis die Maus das Objekt verlässt oder ein Drop auf dem Objekt auftritt. Wenn die Maus das Objekt verlässt, ruft der Container die IDropTarget::D ragLeave des Objekts auf und gibt dann die IDropTarget-Schnittstelle des Objekts frei. Wenn der Drop auftritt, leitet der Container den IDropTarget::D rop-Aufruf an das -Objekt weiter.
  • Schließlich deaktiviert der Container das Objekt.
Ein -Objekt kann S_FALSE aus seinem eigenen IDropTarget::D ragEnter zurückgeben, um anzugeben, dass es keines der Datenformate im Datenobjekt akzeptiert. In diesem Fall kann der Container entscheiden, die Daten für sich selbst zu akzeptieren und einen entsprechenden dwEffect von seinen eigenen IDropTarget::D ragEnter - oder IDropTarget::D ragOver-Methoden zurückzugeben.

Ein Objekt, das S_FALSE von IDropTarget::D ragEnter zurückgibt, sollte vorbereitet sein, um nachfolgende Aufrufe von IDropTarget::D ragEnter ohne IDropTarget::D ragLeave dazwischen zu empfangen. Wenn sich die Maus beim nächsten Aufruf des IDropTarget::D ragOver des Containers immer noch über demselben Objekt befindet, kann der Container versuchen, IDropTarget::D ragEnter erneut für das Objekt aufzurufen.

Hinweise für Anrufer

Ein Container kann den Zeiger auf die IDropTarget-Schnittstelle des Objekts zur späteren Verwendung zwischenspeichern.

Anforderungen

Anforderung Wert
Unterstützte Mindestversion (Client) Windows 2000 Professional [nur Desktop-Apps]
Unterstützte Mindestversion (Server) Windows 2000 Server [nur Desktop-Apps]
Zielplattform Windows
Kopfzeile ocidl.h

Weitere Informationen

Idroptarget

IOleInPlaceObjectWindowless

IPointerInactive::GetActivationPolicy

RegisterDragDrop