Hinweis
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, sich anzumelden oder das Verzeichnis zu wechseln.
Für den Zugriff auf diese Seite ist eine Autorisierung erforderlich. Sie können versuchen, das Verzeichnis zu wechseln.
Wie im Artikel Data Objects and Data Sources (OLE) erläutert, stellen Datenobjekte und Datenquellen beide Seiten einer Datenübertragung dar. In diesem Artikel wird erläutert, wann diese Objekte und Quellen erstellt und zerstört werden, um Ihre Datenübertragungen ordnungsgemäß durchzuführen, einschließlich:
Erstellen von Datenobjekten
Datenobjekte werden von der Zielanwendung verwendet – entweder vom Client oder vom Server. Ein Datenobjekt in der Zielanwendung ist ein Ende einer Verbindung zwischen der Quellanwendung und der Zielanwendung. Ein Datenobjekt in der Zielanwendung wird verwendet, um auf die Daten in der Datenquelle zuzugreifen und damit zu interagieren.
Es gibt zwei häufige Situationen, in denen ein Datenobjekt benötigt wird. Die erste Situation besteht darin, dass Daten mithilfe von Ziehen und Ablegen in Ihrer Anwendung abgelegt werden. Die zweite Situation besteht darin, dass "Inhalte einfügen" oder "Inhalte einfügen" im Menü "Bearbeiten" ausgewählt werden.
In einer Drag-and-Drop-Situation müssen Sie kein Datenobjekt erstellen. Ein Zeiger auf ein vorhandenes Datenobjekt wird an Ihre OnDrop Funktion übergeben. Dieses Datenobjekt wird vom Framework als Teil des Drag-and-Drop-Vorgangs erstellt und wird ebenfalls von diesem zerstört. 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 einen Speziellen Vorgang zum Einfügen oder Einfügen ausführt, sollten Sie ein COleDataObject Objekt erstellen und dessen AttachClipboard Memberfunktion aufrufen. Dadurch wird das Datenobjekt den Daten in der Zwischenablage zugeordnet. Sie können dieses Datenobjekt dann in Ihrer Einfügefunktion verwenden.
Löschen von Datenobjekten
Wenn Sie dem unter Erstellen von Datenobjekten beschriebenen Schema folgen, ist das Zerstören von Datenobjekten ein trivialer Aspekt der Datenübertragung. Das Datenobjekt, das in Ihrer Einfügefunktion erstellt wurde, wird von MFC zerstört, wenn die Einfügefunktion zurückgegeben wird.
Wenn Sie einer anderen Methode zum Behandeln von Einfügevorgängen folgen, stellen Sie sicher, dass das Datenobjekt nach Abschluss des Einfügevorgangs zerstört wird. Bis das Datenobjekt zerstört wird, ist es für jede Anwendung unmöglich, Daten erfolgreich in die Zwischenablage zu kopieren.
Erstellen von Datenquellen
Datenquellen werden von der Datenquelle der Datenübertragung verwendet, die entweder der Client oder die Serverseite der Datenübertragung sein kann. Eine Datenquelle in der Quellanwendung ist ein Ende einer Verbindung zwischen der Quellanwendung und der Zielanwendung. Ein Datenobjekt in der Zielanwendung wird verwendet, um mit den Daten in der Datenquelle zu interagieren.
Datenquellen werden erstellt, wenn eine Anwendung Daten in die Zwischenablage kopieren muss. Ein typisches Szenario wird wie folgt ausgeführt:
Der Benutzer wählt einige Daten aus.
Der Benutzer wählt "Kopieren " (oder "Ausschneiden") aus dem Menü "Bearbeiten " aus oder beginnt mit einem Drag-and-Drop-Vorgang.
Abhängig vom Entwurf des Programms erstellt die Anwendung entweder ein
COleDataSourceObjekt oder ein Objekt aus einer klasse, die vonCOleDataSource.Die ausgewählten Daten werden in die Datenquelle eingefügt, indem eine der Funktionen in den
COleDataSource::CacheDataGruppen aufgerufenCOleDataSource::DelayRenderDatawird.Die Anwendung ruft die
SetClipboardMemberfunktion (oder dieDoDragDropMemberfunktion auf, wenn es sich um einen Drag-and-Drop-Vorgang handelt) aus dem in Schritt 3 erstellten Objekt.Wenn es sich um einen Ausschneiden-Vorgang handelt oder
DoDragDropDROPEFFECT_MOVE zurückgibt, werden die in Schritt 1 ausgewählten Daten aus dem Dokument gelöscht.
Dieses Szenario wird von den MFC OLE-Beispielen OCLIENT und HIERSVR implementiert. Sehen Sie sich die Quelle für die von jeder Anwendung CViewabgeleitete Klasse für alle, aber die GetClipboardData funktionen an OnGetClipboardData . Diese beiden Funktionen befinden sich entweder in den COleClientItemCOleServerItemoder -abgeleiteten Klassenimplementierungen. Diese Beispielprogramme bieten ein gutes Beispiel für die Implementierung dieser Konzepte.
Eine andere Situation, in der Sie ein Objekt erstellen COleDataSource möchten, tritt auf, wenn Sie das Standardverhalten eines Drag-and-Drop-Vorgangs ändern. Weitere Informationen finden Sie im OLE-Ziehen und -Ablegen: Anpassen des Artikels "Ziehen und Ablegen ".
Löschen von Datenquellen
Datenquellen müssen von der Anwendung zerstört werden, die derzeit für sie zuständig ist. In Situationen, in denen Sie die Datenquelle an OLE übergeben, z. B. das Aufrufen von COleDataSource::D oDragDrop, müssen Sie aufrufen pDataSrc->InternalRelease. 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 Ihre Datenquelle nicht an OLE übergeben haben, sind Sie dafür verantwortlich, sie wie bei jedem typischen C++-Objekt zu zerstören.
Weitere Informationen finden Sie unter Ziehen und Ablegen, Zwischenablage und Bearbeiten von Datenobjekten und Datenquellen.
Siehe auch
Datenobjekte und Datenquellen (OLE)
COleDataObject-Klasse
COleDataSource-Klasse