Condividi tramite


Oggetti dati e origini dati (OLE): creazione e distruzione

Come illustrato nell'articolo Oggetti dati e origini dati (OLE), gli oggetti dati e le origini dati rappresentano entrambi i lati di un trasferimento dati. Questo articolo descrive quando creare ed eliminare questi oggetti e origini per eseguire i trasferimenti dei dati nel modo corretto, con informazioni su:

Creazione di oggetti dati

Gli oggetti dati vengono usati dall'applicazione di destinazione, ovvero il client o il server. Un oggetto dati nell'applicazione di destinazione è un'estremità di una connessione tra l'applicazione di origine e quella di destinazione. Un oggetto dati nell'applicazione di destinazione viene usato per accedere ai dati nell'origine dati e per interagirvi.

Un oggetto dati è necessario in due situazioni comuni. La prima situazione è quella in cui nell'applicazione vengono rilasciati dati usando il trascinamento della selezione. La seconda situazione è quella in cui si sceglie Incolla o Incolla speciale dal menu Modifica.

In una situazione che prevede il trascinamento della selezione non è necessario creare un oggetto dati. Un puntatore a un oggetto dati esistente verrà passato alla funzione OnDrop. Questo oggetto dati viene creato dal framework come parte dell'operazione di trascinamento e rilascio e verrà anche eliminato dal framework. Questo non sempre avviene quando l'operazione Incolla viene eseguita con un altro metodo. Per altre informazioni, vedere Eliminazione di oggetti dati.

Se l'applicazione esegue un'operazione Incolla o Incolla speciale, è consigliabile creare un oggetto COleDataObject e chiamarne la funzione membro AttachClipboard. In questo modo, l'oggetto dati viene associato ai dati negli Appunti. È quindi possibile usare questo oggetto dati nella funzione Incolla.

Eliminazione di oggetti dati

Se si segue lo schema descritto in Creazione di oggetti dati, l'eliminazione di oggetti dati è un aspetto semplice dei trasferimenti di dati. L'oggetto dati creato nella funzione Incolla verrà eliminato definitivamente da MFC quando viene restituita la funzione Incolla.

Se si segue un altro metodo per gestire le operazioni Incolla, assicurarsi che l'oggetto dati venga eliminato al termine dell'operazione Incolla. Fino a quando l'oggetto dati non viene eliminato definitivamente, sarà impossibile per qualsiasi applicazione copiare correttamente dati negli Appunti.

Creazione di origini dati

Le origini dati vengono usate dall'origine del trasferimento dei dati, che può essere il lato client o il lato server del trasferimento. Un'origine dati nell'applicazione di origine è un'estremità di una connessione tra l'applicazione di origine e quella di destinazione. Un oggetto dati nell'applicazione di destinazione viene usato per interagire con i dati nell'origine dati.

Le origini dati vengono create quando un'applicazione deve copiare dati negli Appunti. Ecco uno scenario tipico:

  1. L'utente seleziona alcuni dati.

  2. L'utente sceglie Copia (o Taglia) dal menu Modifica o avvia un'operazione di trascinamento della selezione.

  3. A seconda della progettazione del programma, l'applicazione crea un oggetto COleDataSource o un oggetto da una classe derivata da COleDataSource.

  4. I dati selezionati vengono inseriti nell'origine dati chiamando una delle funzioni nel gruppo COleDataSource::CacheData o COleDataSource::DelayRenderData.

  5. L'applicazione chiama la funzione membro SetClipboard (o la funzione membro DoDragDrop se si tratta di un'operazione di trascinamento della selezione) che appartiene all'oggetto creato nel passaggio 3.

  6. Se si tratta di un'operazione Taglia o DoDragDrop restituisce DROPEFFECT_MOVE, i dati selezionati nel passaggio 1 vengono eliminati dal documento.

Questo scenario viene implementato dagli esempi OLE MFC OCLIENT e HIERSVR. Esaminare l'origine per ogni classe derivata da CView dell'applicazione per tutte le funzioni tranne GetClipboardData e OnGetClipboardData. Queste due funzioni si trovano nelle implementazioni delle classi derivate da COleClientItem o COleServerItem. Questi programmi di esempio offrono un buon esempio dell'implementazione di questi concetti.

Un'altra situazione in cui si potrebbe voler creare un oggetto COleDataSource si verifica quando si modifica il comportamento predefinito di un'operazione di trascinamento e rilascio. Per altre informazioni, vedere l'articolo Trascinamento e rilascio OLE: Personalizzare il trascinamento della selezione .

Eliminazione delle origini dati

Le origini dati devono essere eliminate definitivamente dall'applicazione che ne è attualmente responsabile. In situazioni in cui si consegna l'origine dati a OLE, ad esempio chiamando COleDataSource::D oDragDrop, è necessario chiamare pDataSrc->InternalRelease. Ad esempio:

void CMyListView::OnLvnBegindrag(NMHDR *pNMHDR, LRESULT *pResult)
{
   UNREFERENCED_PARAMETER(pResult);

   LPNMLISTVIEW pNMLV = reinterpret_cast<LPNMLISTVIEW>(pNMHDR);

   CMyDataSource* pDataSrc = new CMyDataSource();
   if (NULL != pDataSrc)
   {
      pDataSrc->Initialize(pNMLV, this);
      pDataSrc->DelayRenderData((CLIPFORMAT)RegisterClipboardFormat(_T("TIGroupFiles")));
      pDataSrc->DoDragDrop();
      pDataSrc->InternalRelease();
   }
}

Se l'origine dati non è stata passata a OLE, si è responsabili della sua eliminazione definitiva, come per tutti i normali oggetti C++.

Per altre informazioni, vedere Trascinare, eliminare, appunti e modificare oggetti dati e origini dati.

Vedi anche

Oggetti dati e origini dati (OLE)
Classe COleDataObject
Classe COleDataSource