Interfacce di trasferimento dati
L'interfaccia IDataObject fornisce ai consumer di dati metodi per ottenere e impostare i dati di un oggetto, determinando i formati supportati dall'oggetto e registrando e ricevendo notifiche quando i dati nell'oggetto cambiano. Quando si ottengono dati, un chiamante può specificare il formato in cui si desidera eseguire il rendering dei dati. L'origine dei dati, tuttavia, determina il supporto di archiviazione, che restituisce in un parametro out fornito dal chiamante.
Da solo, IDataObject fornisce tutti gli strumenti necessari per implementare i trasferimenti degli Appunti di Windows o i trasferimenti di documenti composti nelle applicazioni. Se vuoi supportare anche i trasferimenti di trascinamento della selezione, devi implementare le interfacce IDropSource e IDropTarget insieme a IDataObject.
L'interfaccia IDataObject combinata con le API degli Appunti OLE offre tutte le funzionalità delle API degli Appunti di Windows. In genere non è necessario usare entrambe le API degli Appunti. I fornitori di dati che supportano trasferimenti di trascinamento della selezione o documenti composti OLE devono implementare l'interfaccia IDataObject . Se l'applicazione supporta ora solo i trasferimenti degli Appunti, ma si prevede di aggiungere documenti trascinati o composti nelle versioni successive, è possibile implementare IDataObject e le API degli Appunti OLE per ridurre al minimo la quantità di tempo impiegato per la ricreazione e il debug in un secondo momento. È anche possibile implementare IDataObject per utilizzare supporti di trasferimento diversi dalla memoria globale.
La tabella seguente riepiloga quali usare, a seconda dei tipi di trasferimento dati che si desidera supportare:
Per supportare… | Utilizzo |
---|---|
Documenti composti |
Idataobject |
Trascinare e rilasciare i trasferimenti |
IDataObject, IDropSource, IDropTarget, DoDragDrop (o equivalente) |
Trasferimenti degli Appunti usando esclusivamente la memoria globale |
API Appunti |
Gli Appunti vengono trasferiti utilizzando supporti di scambio diversi dalla memoria globale. |
Idataobject |
Gli Appunti trasferisce ora, ma trascinano o rilasciano documenti composti in un secondo momento |
IDataObject e le interfacce e le funzioni elencate in precedenza per i trasferimenti di trascinamento della selezione |
Quando un utente avvia un'operazione di trasferimento dati, l'applicazione di origine crea un'istanza di IDataObject e tramite di essa rende i dati disponibili in uno o più formati. In un trasferimento degli Appunti, l'applicazione chiama la funzione OleSetClipboard per passare un puntatore a un oggetto dati a OLE. OleSetClipboard offre anche formati di dati standard per le applicazioni OLE versione 1 e non OLE. In un trasferimento di trascinamento della selezione, l'applicazione chiama invece la funzione DoDragDrop.
Sul lato ricevente del trasferimento, la destinazione riceve il puntatore IDataObject come argomento a una chiamata di IDropTarget::D rop o chiamando la funzione OleSetClipboard, a seconda che il trasferimento sia tramite trascinamento o rilascio degli Appunti. Dopo aver ottenuto questo puntatore, la destinazione chiama IDataObject::EnumFormatEtc per informazioni sui formati disponibili per il recupero e sui tipi di supporti che possono essere ottenuti. Con queste informazioni, l'applicazione ricevente richiede i dati con una chiamata a IDataObject::GetData.