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 per entrambi i lati di un trasferimento dei dati. In questo articolo viene illustrato quando creare ed eliminare tali oggetti e origini per l'esecuzione dei trasferimenti di dati correttamente, importandovi:

  • Creare gli oggetti dati

  • Eliminare gli oggetti dati

  • Creare origini dati

  • Eliminare le origini dati

Creare gli oggetti dati

Gli oggetti dati utilizzati da un'applicazione di destinazione al client o nel server. Un oggetto dati in un'applicazione di destinazione è una estremità di una connessione tra la applicazione di origine e la applicazione di destinazione. Un oggetto dati in un'applicazione di destinazione viene utilizzato per accedere e interagire con i dati nell'origine dati.

Esistono due situazioni più comuni in cui di un oggetto dati è necessario. La prima situazione si verifica quando i dati vengono rilasciati nell'applicazione mediante trascinamento della selezione. La seconda situazione può verificarsi quando l'inserimento o su paste special viene scelto dal menu Modifica.

In una situazione di trascinamento, non è necessario creare un oggetto dati. Un puntatore a un oggetto dati esistente verrà passato alla funzione di OnDrop. Questo oggetto dati dal framework durante l'operazione di trascinamento della selezione e viene distrutto da. Questa operazione non è sempre così inserire quando viene eseguito con un altro metodo. Per ulteriori informazioni, vedere Eliminare gli oggetti dati.

Se l'applicazione esegue un inserimento o un'operazione speciale incolla, è possibile creare un oggetto di COleDataObject e chiamare la funzione membro di AttachClipboard. Si associa l'oggetto dati con i dati negli Appunti. È quindi possibile utilizzare questo oggetto dati nella funzione incolla.

Per un esempio di come eseguire questa operazione, vedere la funzione di DoPasteItem nel file di MAINVIEW.CPP che fanno parte dell'esempio OCLIENT oLE MFC. OCLIENT implementa una funzione che esegue tutte le operazioni incollare e chiama DoPasteItem dai OnDrop, OnPaste e funzioni di OnPasteLink. Poiché OnDrop presenta un puntatore a un oggetto dati passato, passare il puntatore fino a DoPasteItem. OnPaste e passare NULL di OnPasteLink per questo parametro, comunica DoPasteItem di creare un oggetto dati e connetterlo agli Appunti. Questo schema separa il codice dell'inserimento è pertanto necessario eseguire il debug solo in una posizione, ma è comunque possibile utilizzarlo per entrambi i tipi di operazione Incolla.

Eliminare gli oggetti dati

Seguendo lo schema descritto in Creare gli oggetti dati, eliminino gli oggetti dati è un aspetto molto semplice dei trasferimenti di dati. L'oggetto dati creato nella funzione incolla viene distrutto da MFC quando la funzione incolla restituisce.

Se si segue un altro metodo di operazioni e Incolla di gestione, assicurarsi che l'oggetto dati venga eliminato dopo l'apertura dell'operazione Incolla è completa. Prima di eliminare l'oggetto dati, sarà impossibile per qualsiasi applicazione correttamente copiare i dati negli Appunti.

Creare origini dati

Le origini dati vengono utilizzate dall'origine del trasferimento dei dati, che può essere il client o nel lato server per il trasferimento dei dati. Un'origine dati in un'applicazione di origine è una estremità di una connessione tra la applicazione di origine e la applicazione di destinazione. Un oggetto dati in un'applicazione di destinazione viene utilizzato per interagire con i dati dell'origine dati.

Le origini dati create quando un'applicazione deve copiare i dati negli Appunti. Le esecuzioni tipiche di uno scenario come la seguente:

  1. L'utente seleziona dati.

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

  3. In base alla progettazione del programma, l'applicazione crea un oggetto di COleDataSource o un oggetto da una classe derivata da COleDataSource.

  4. I dati selezionati verranno inseriti nell'origine dati chiamando una delle funzioni in gruppi di COleDataSource::DelayRenderData o di COleDataSource::CacheData.

  5. L'applicazione chiama la funzione membro di SetClipboard (o la funzione membro di 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 di Taglia o DoDragDrop restituisce DROPEFFECT_MOVE, i dati selezionati nel passaggio 1 vengono eliminati dal documento.

Questo scenario è implementato dagli esempi OCLIENT e HIERSVR oLE MFC. Esaminare l'origine di CViewdi ogni applicazione - classe derivata per tutti ma le funzioni di OnGetClipboardData e di GetClipboardData. Queste due funzioni sono in COleClientItem o in COleServerItem- implementazioni della classe derivata. Questi programmi di esempio forniscono un buon esempio di come implementare questi concetti.

Un'altra una situazione in cui potrebbe essere necessario creare un oggetto di COleDataSource si verifica se si modifica il comportamento predefinito dell'operazione di trascinamento. Per ulteriori informazioni, vedere l'articolo di Trascinamento della selezione: Personalizzazione.

Eliminare origini dati

Le origini dati devono distruggere attualmente dall'applicazione responsabile di essi. Nelle situazioni in cui si passa l'origine dati OLE, come chiamare COleDataSource::DoDragDrop, è necessario chiamare pDataSrc->InternalRelease. Di seguito è riportato un 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 non è stato passato l'origine dati OLE, quindi si è responsabili di eliminarlo in maniera permanente, come per qualsiasi altro oggetto comune di C++.

Per ulteriori informazioni, vedere Trascina la selezione, Appunti e Modificare oggetti dati e origini dati.

Vedere anche

Riferimenti

Classe COleDataObject

Classe COleDataSource

Concetti

Oggetti dati e origini dati (OLE)