Condividi tramite


Oggetti dati e origini dati: 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 database di origine per l'esecuzione dei trasferimenti di dati correttamente, tra cui:

  • Creare gli oggetti dati

  • Eliminare gli oggetti dati

  • Creare origini dati

  • Eliminare le origini dati

Creare gli oggetti dati

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

Esistono due situazioni più comuni in cui 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'operazione incolla o l'Incolla speciale viene scelta dal menu Modifica.

In una situazione di trascinamento della selezione, 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ì quando incollare viene eseguito con un altro metodo.Per ulteriori informazioni, vedere Eliminare gli oggetti dati.

Se l'applicazione esegue una funzione incolla o un'operazione speciale incolla, è necessario 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 fa parte dell'esempio OCLIENTOLE MFC.OCLIENT implementa una funzione che esegue tutte le operazioni incollare e chiama DoPasteItem dai relativi OnDrop, OnPastee funzioni di OnPasteLink .Poiché OnDrop presenta un puntatore a un oggetto dati passato, passare il puntatore fino a DoPasteItem.OnPaste e sessione NULL di OnPasteLink per questo parametro, segnalare che DoPasteItem di creare un oggetto dati e di connetterlo agli Appunti.Questa combinazione separa il codice incolla pertanto è necessario eseguirne il debug solo in un luogo, è comunque possibile utilizzarlo per entrambi i tipi di operazione Incolla.

Eliminare gli oggetti dati

Se invece la combinazione descritta in creare gli oggetti dati, eliminare 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 dell'operazione Incolla di gestione, assicurarsi che l'oggetto dati venga eliminato dopo l'operazione Incolla è completa.Fino a eliminare l'oggetto dati, sarà possibile per qualsiasi applicazione correttamente copi i dati negli Appunti.

Creare origini dati

Le origini dati vengono utilizzate dall'origine di trasferimento dei dati, che può essere il client o il 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 nell'applicazione di destinazione viene utilizzato per interagire con i dati dell'origine dati.

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

  1. L'utente seleziona alcun dato.

  2. L'utente sceglie Copia (o Taglia) dal menu o da iniziale 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 vengono 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 al 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 HIERSVROLE MFC.Esaminare l'origine di CViewdi ogni applicazione classe derivata da 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: personalizzare .

Eliminare le 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, pertanto è responsabile di eliminarlo, come per qualsiasi altro oggetto tipico di C++.

Per ulteriori informazioni, vedere Trascinamento della selezione, Appuntie Modificare gli oggetti dati e origini dati.

Vedere anche

Riferimenti

Classe COleDataObject

Classe COleDataSource

Concetti

Oggetti dati e origini dati (OLE)