DoDragDrop-Funktion (ole2.h)

Führt einen OLE-Drag-and-Drop-Vorgang aus.

Hinweis Sie müssen OleInitialize aufrufen, bevor Sie diese Funktion aufrufen.
 

Syntax

HRESULT DoDragDrop(
  [in]  LPDATAOBJECT pDataObj,
  [in]  LPDROPSOURCE pDropSource,
  [in]  DWORD        dwOKEffects,
  [out] LPDWORD      pdwEffect
);

Parameter

[in] pDataObj

Zeiger auf die IDataObject-Schnittstelle für ein Datenobjekt, das die zu ziehenden Daten enthält.

[in] pDropSource

Zeiger auf eine Implementierung der IDropSource-Schnittstelle , die für die Kommunikation mit der Quelle während des Ziehvorgangs verwendet wird.

[in] dwOKEffects

Wirkt sich auf die Quelle im OLE-Drag-and-Drop-Vorgang aus. Am wichtigsten ist, ob es einen Umzug zulässt. Die Parameter dwOKEffect und pdwEffect erhalten Werte aus der DROPEFFECT-Enumeration . Eine Liste der Werte finden Sie unter DROPEFFECT.

[out] pdwEffect

Zeiger auf einen Wert, der angibt, wie sich der OLE-Drag-and-Drop-Vorgang auf die Quelldaten auswirkte. Der pdwEffect-Parameter wird nur festgelegt, wenn der Vorgang nicht abgebrochen wird.

Rückgabewert

Diese Funktion gibt bei Erfolg S_OK zurück. Weitere mögliche Werte sind:

Rückgabecode Beschreibung
DRAGDROP_S_DROP
Der OLE-Drag-and-Drop-Vorgang war erfolgreich.
DRAGDROP_S_CANCEL
Der OLE-Drag-and-Drop-Vorgang wurde abgebrochen.
E_UNSPEC
Unerwarteter Fehler.

Hinweise

Wenn Sie eine Anwendung entwickeln, die als Datenquelle für einen OLE-Drag-and-Drop-Vorgang fungieren kann, müssen Sie DoDragDrop aufrufen, wenn Sie feststellen, dass der Benutzer einen OLE-Drag-and-Drop-Vorgang gestartet hat.

Die DoDragDrop-Funktion tritt in eine Schleife ein, in der verschiedene Methoden in den Schnittstellen IDropSource und IDropTarget aufgerufen werden. (Für einen erfolgreichen Drag-and-Drop-Vorgang muss die Anwendung, die als Datenquelle fungiert, auch IDropSource implementieren, während die Zielanwendung IDropTarget implementieren muss.)

  1. Die DoDragDrop-Funktion bestimmt das Fenster unter der aktuellen Cursorposition. Anschließend wird überprüft, ob dieses Fenster ein gültiges Ablageziel ist.
  2. Wenn das Fenster ein gültiges Ablageziel ist, ruft DoDragDropIDropTarget::D ragEnter auf. Diese Methode stellt einen Effektcode bereit, der angibt, was passieren würde, wenn der Drop tatsächlich erfolgt. Eine Liste der gültigen Drop-Effekte finden Sie in der DROPEFFECT-Enumeration .
  3. DoDragDrop ruft IDropSource::GiveFeedback mit dem Effektcode auf, damit die Drop-Source-Schnittstelle dem Benutzer geeignetes visuelles Feedback geben kann. Der an DoDragDrop übergebene pDropSource-Zeiger gibt die entsprechende IDropSource-Schnittstelle an.
  4. DoDragDrop verfolgt Mauszeigerbewegungen und Änderungen im Tastatur- oder Maustastenzustand nach.
    • Wenn sich der Benutzer aus einem Fenster bewegt, ruft DoDragDropIDropTarget::D ragLeave auf.
    • Wenn die Maus in ein anderes Fenster eintritt, bestimmt DoDragDrop , ob dieses Fenster ein gültiges Ablageziel ist, und ruft dann IDropTarget::D ragEnter für dieses Fenster auf.
    • Wenn sich die Maus bewegt, aber im selben Fenster bleibt, ruft DoDragDropIDropTarget::D ragOver auf.
  5. Wenn sich der Tastatur- oder Maustastenzustand ändert, ruft DoDragDropIDropSource::QueryContinueDrag auf und bestimmt, ob der Ziehen fortgesetzt, die Daten gelöscht oder der Vorgang basierend auf dem Rückgabewert abgebrochen werden soll.
    • Wenn der Rückgabewert S_OK ist, ruft DoDragDrop zuerst IDropTarget::D ragOver auf, um den Vorgang fortzusetzen. Diese Methode gibt einen neuen Effektwert zurück, und DoDragDrop ruft dann IDropSource::GiveFeedback mit dem neuen Effekt auf, damit geeignetes visuelles Feedback festgelegt werden kann. Eine Liste der gültigen Drop-Effekte finden Sie in der DROPEFFECT-Enumeration . IDropTarget::D ragOver und IDropSource::GiveFeedback sind gekoppelt, sodass der Benutzer das aktuellste Feedback zur Mausposition erhält, wenn sich die Maus über das Ablageziel bewegt.
    • Wenn der Rückgabewert DRAGDROP_S_DROP ist, ruft DoDragDropIDropTarget::D rop auf. Die DoDragDrop-Funktion gibt den letzten Effektcode an die Quelle zurück, sodass die Quellanwendung den entsprechenden Vorgang für die Quelldaten ausführen kann, z. B. die Daten ausschneiden, wenn der Vorgang eine Verschiebung war.
    • Wenn der Rückgabewert DRAGDROP_S_CANCEL ist, ruft die DoDragDrop-FunktionIDropTarget::D ragLeave auf.
DoDragDrop unterstützt das Aufrufen von Drag and Drop nicht, wenn Sie touch- oder stifteingaben.

Um Toucheingaben oder Stifteingaben zu unterstützen, rufen Sie DoDragDrop nicht über Ihren Touchhandler auf. Rufen Sie stattdessen DoDragDrop von Ihrem Handler für die Mausnachrichten auf, die das System bei der Toucheingabe synthetisiert.

Die Anwendung kann synthetisierte Nachrichten identifizieren, indem sie die GetMessageExtraInfo-Funktion aufruft. Weitere Informationen zur Verwendung von GetMessageExtraInfo zur Unterscheidung zwischen Mauseingabe und Windows Touch-Eingabe finden Sie unter Problembehandlung bei Anwendungen.

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 ole2.h
Bibliothek Ole32.lib
DLL Ole32.dll

Weitere Informationen

IDropSource