Funzione DoDragDrop (ole2.h)

Esegue un'operazione di trascinamento e rilascio OLE.

Nota Prima di chiamare questa funzione, è necessario chiamare OleInitialize .
 

Sintassi

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

Parametri

[in] pDataObj

Puntatore all'interfaccia IDataObject in un oggetto dati contenente i dati trascinati.

[in] pDropSource

Puntatore a un'implementazione dell'interfaccia IDropSource , utilizzata per comunicare con l'origine durante l'operazione di trascinamento.

[in] dwOKEffects

Gli effetti dell'origine consentono nell'operazione di trascinamento e rilascio OLE. Il più significativo è se consente uno spostamento. I parametri dwOKEffect e pdwEffect ottengono valori dall'enumerazione DROPEFFECT . Per un elenco di valori, vedere DROPEFFECT.

[out] pdwEffect

Puntatore a un valore che indica il modo in cui l'operazione di trascinamento OLE ha interessato i dati di origine. Il parametro pdwEffect viene impostato solo se l'operazione non viene annullata.

Valore restituito

Questa funzione restituisce S_OK in caso di esito positivo. Altri valori possibili includono quanto segue.

Codice restituito Descrizione
DRAGDROP_S_DROP
L'operazione di trascinamento OLE ha avuto esito positivo.
DRAGDROP_S_CANCEL
L'operazione di trascinamento OLE è stata annullata.
E_UNSPEC
Si è verificato un errore imprevisto.

Commenti

Se si sta sviluppando un'applicazione che può fungere da origine dati per un'operazione di trascinamento e rilascio OLE, è necessario chiamare DoDragDrop quando si rileva che l'utente ha avviato un'operazione di trascinamento e rilascio OLE.

La funzione DoDragDrop entra in un ciclo in cui chiama vari metodi nelle interfacce IDropSource e IDropTarget. Per un'operazione di trascinamento riuscita, l'applicazione che funge da origine dati deve anche implementare IDropSource, mentre l'applicazione di destinazione deve implementare IDropTarget.

  1. La funzione DoDragDrop determina la finestra nella posizione del cursore corrente. Verifica quindi se questa finestra è una destinazione di rilascio valida.
  2. Se la finestra è una destinazione di rilascio valida, DoDragDrop chiama IDropTarget::D ragEnter. Questo metodo fornisce un codice effetto che indica cosa accadrebbe se l'eliminazione si è effettivamente verificata. Per un elenco di effetti di eliminazione validi, vedere l'enumerazione DROPEFFECT .
  3. DoDragDrop chiama IDropSource::GiveFeedback con il codice effetto in modo che l'interfaccia di origine di rilascio possa fornire commenti visivi appropriati all'utente. Il puntatore pDropSource passato a DoDragDrop specifica l'interfaccia IDropSource appropriata.
  4. DoDragDrop tiene traccia dei movimenti del cursore del mouse e modifiche nello stato del pulsante della tastiera o del mouse.
    • Se l'utente si sposta fuori da una finestra, DoDragDrop chiama IDropTarget::D ragLeave.
    • Se il mouse entra in un'altra finestra, DoDragDrop determina se tale finestra è una destinazione di rilascio valida e quindi chiama IDropTarget::D ragEnter per tale finestra.
    • Se il mouse si sposta ma rimane nella stessa finestra, DoDragDrop chiama IDropTarget::D ragOver.
  5. Se si verifica una modifica nello stato della tastiera o del pulsante del mouse, DoDragDrop chiama IDropSource::QueryContinueDrag e determina se continuare il trascinamento, per eliminare i dati o annullare l'operazione in base al valore restituito.
    • Se il valore restituito è S_OK, DoDragDrop chiama prima IDropTarget::D ragOver per continuare l'operazione. Questo metodo restituisce un nuovo valore di effetto e DoDragDrop quindi chiama IDropSource::GiveFeedback con il nuovo effetto in modo che sia possibile impostare commenti visivi appropriati. Per un elenco di effetti di eliminazione validi, vedere l'enumerazione DROPEFFECT . IDropTarget::D ragOver e IDropSource::GiveFeedback vengono associati in modo che, quando il mouse si sposta nella destinazione di rilascio, l'utente riceve il feedback più aggiornato sulla posizione del mouse.
    • Se il valore restituito è DRAGDROP_S_DROP, DoDragDrop chiama IDropTarget::D rop. La funzione DoDragDrop restituisce l'ultimo codice effetto all'origine, quindi l'applicazione di origine può eseguire l'operazione appropriata sui dati di origine, ad esempio tagliare i dati se l'operazione è stata spostata.
    • Se il valore restituito è DRAGDROP_S_CANCEL, la funzione DoDragDrop chiama IDropTarget::D ragLeave.
DoDragDrop non supporta il supporto di trascinamento e rilascio quando si gestisce l'input tocco o penna.

Per supportare l'input tocco o penna, non chiamare DoDragDrop dal gestore tocco. Chiamare invece DoDragDrop dal gestore per i messaggi del mouse che il sistema sintetizza all'input tocco.

L'applicazione può identificare i messaggi sintetizzati chiamando la funzione GetMessageExtraInfo . Per altre informazioni sull'uso di GetMessageExtraInfo per distinguere tra input del mouse e input tocco di Windows, vedere Risoluzione dei problemi delle applicazioni.

Requisiti

Requisito Valore
Client minimo supportato Windows 2000 Professional [solo app desktop]
Server minimo supportato Windows 2000 Server [solo app desktop]
Piattaforma di destinazione Windows
Intestazione ole2.h
Libreria Ole32.lib
DLL Ole32.dll

Vedi anche

IDropSource