Freigeben über


Datenobjekte und Datenquellen: Erstellen und Zerstören

Wie im Artikel Datenobjekte und Datenquellen (OLE) erläutert, enthalten Datenobjekte und Datenquellen beide Seiten einer Datenübertragung dar. Dieser Artikel wird beschrieben, wann diese Objekte und Quellen erstellt und zerstört, um Ihre Datenübertragungen ordnungsgemäß auszuführen und enthält:

  • Erstellen von Datenobjekten

  • Zerstören von Datenobjekten

  • Erstellen von Datenquellen

  • Zerstören von Datenquellen

Erstellen von Datenobjekten

Datenobjekte werden durch die Ziel-Anwendung - Entweder der Client oder Server verwendet. Ein Datenobjekt in der Ziel-Anwendung ist ein Ende einer Verbindung zwischen der aussieht und der Ziel-Anwendung. Ein Datenobjekt in der Ziel-Anwendung wird verwendet, um mit Daten in der Datenquelle zuzugreifen und zu bearbeiten.

Es gibt zwei allgemeine Situationen, in denen ein Datenobjekt benötigt wird. Die erste Situation ist, wenn Daten in der Anwendung mithilfe von Drag & Drop abgelegt werden. Die zweite Situation ist, wenn Einfügen oder Inhalte einfügen im Menü Bearbeiten ausgewählt ist.

In einer Drag & Drop-Situation es nicht erforderlich, um ein Datenobjekt zu erstellen. Ein Zeiger auf ein Objekt der vorhandenen Daten wird der OnDrop-Funktion übergeben. Dieses Objekt wird durch das Framework als Teil des Drag & Drop-Vorgangs erstellt und ist durch es zerstört werden. Dies ist nicht immer der Fall, wenn das Einfügen durch eine andere Methode erfolgt. Weitere Informationen finden Sie unter Zerstören von Datenobjekten.

Wenn die Anwendung eine Einfügen oder eine Pastenspezialoperation ausführt, sollte ein COleDataObject-Objekt erstellen und dessen AttachClipboard-Memberfunktion aufrufen. Dadurch wird das Datenobjekt mit den Daten in der Zwischenablage zu. Sie können dieses Datenobjekt in der Pastenfunktion dann verwenden.

Ein Beispiel, wie dies durchgeführt wird, finden Sie die Funktion DoPasteItem in der MAINVIEW.CPP-Datei, die Teil des Beispiels OCLIENT MFC-OLE ist. OCLIENT implementiert eine Funktion, die alle Einfügevorgänge ausführt und DoPasteItem der OnDrop, OnPaste und OnPasteLink aufruft Funktionen. Da OnDrop einen Zeiger an ein Datenobjekt enthält, das an es übergeben wird, gibt sie den Zeiger an DoPasteItem weitergegeben. OnPaste und OnPasteLink werden NULL für diesen Parameter, DoPasteItem hervorgeht, um ein Datenobjekt und es anzufügen die Zwischenablage zu erstellen. Dieses Schema trennt den Pastencode, müssen Sie ihn in nur einer Stelle debuggen, aber Sie können sie für beide Arten Einfügevorgänge weiterhin verwenden.

Zerstören von Datenobjekten

Wenn Sie das Schema folgen, das in Erstellen von Datenobjekten beschrieben wird, Datenobjekte darstellt zu zerstören trivialer ein Aspekt von Datenübertragungen. Das Datenobjekt, das in der Pastenfunktion erstellt wurde, wird von MFC zerstört, wenn die Pastenfunktion zurückkehrt.

Wenn Sie eine andere Methode von Behandlungseinfügevorgängen folgen, müssen Sie sicherstellen, dass das Datenobjekt zerstört, nachdem der Einfügevorgang abgeschlossen ist. Bis das Datenobjekt zerstört wurde, ist es unmöglich, dass jede Anwendung erfolgreich Daten in die Zwischenablage kopiert.

Erstellen von Datenquellen

Datenquellen werden von der Quelle der Datenübertragung verwendet, die entweder der Client oder die Serverseite der Datenübertragung sein kann. Eine Datenquelle in der aussieht ist ein Ende einer Verbindung zwischen der aussieht und der Ziel-Anwendung. Ein Datenobjekt in der Ziel-Anwendung wird verwendet, um mit Daten in der Datenquelle zu interagieren.

Datenquellen werden erstellt, wenn eine Anwendung Daten in die Zwischenablage kopieren muss. Ausführungen eines wie typische Szenarios:

  1. Der Benutzer wählt einige Daten aus.

  2. Der Benutzer wählt ( Kopieren oder Ausschneiden) im Menü Bearbeiten aus oder gestartet einen Drag & Drop-Vorgang.

  3. Abhängig vom Design des Programms, erstellt die Anwendung entweder ein COleDataSource-Objekt oder ein Objekt von einer Klasse, die von COleDataSource abgeleitet wird.

  4. Die ausgewählten Daten werden in die Datenquelle eingefügt, indem eine der Funktionen in den COleDataSource::CacheData oder COleDataSource::DelayRenderData aufruft Gruppen.

  5. Die Anwendung ruft die SetClipboard-Memberfunktion (oder die DoDragDrop-Memberfunktion, wenn dies ein Drag & Drop-Vorgang entspricht), die zu dem Objekt, auf das in Schritt 3 erstellt wurde.

  6. Wenn dieses ein Ausschneiden Vorgang ist, oder DoDragDropDROPEFFECT_MOVE zurückgibt, werden die Daten, die in Schritt 1 ausgewählt werden, dem Dokument gelöscht.

Dieses Szenario wird von OCLIENT die Beispiele und HIERSVR MFC-OLE implementiert. Betrachten Sie die Quelle nach CView jeder Anwendung abgeleitete Klasse für nur die Funktionen GetClipboardData und OnGetClipboardData. Diese beiden Features sind entweder in COleClientItem oder COleServerItem- Implementierungen der abgeleiteten Klasse. Beispielprogramme Diese bieten ein gutes Beispiel, wie Sie diese Konzepte implementiert.

Eine weitere Situation, in der Sie ein COleDataSource-Objekt erstellen sollten, tritt auf, wenn das Standardverhalten eines Drag & Drop-Vorgangs ändern. Weitere Informationen finden Sie im Artikel Drag & Drop: Anpassen.

Zerstören von Datenquellen

Datenquellen müssen mithilfe zerstört werden, die für sie gerade zuständig ist. In Situationen, in denen die Datenquelle zu, wie OLE Aufrufen von COleDataSource::DoDragDrop übergeben, müssen Sie pDataSrc->InternalRelease aufrufen. Beispiel:

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();
   }
}

Wenn Sie die Datenquelle nicht zu OLE übergeben haben, dann sind Sie das Zerstören es, wie mit einem typischen C++-Objekt zuständig.

Weitere Informationen finden Sie unter Drag & Drop, Zwischenablage und Bearbeitung von Datenobjekten und von Datenquellen.

Siehe auch

Referenz

COleDataObject-Klasse

COleDataSource-Klasse

Konzepte

Datenobjekte und Datenquellen (OLE)