Datenobjekte und Datenquellen: Erstellen und Zerstörung
Wie im Artikel Datenobjekte und Datenquellen (OLE) erklärt, stellen Datenobjekten und Datenquellen beide Seiten einer Datenübertragung dar.In diesem Artikel wird beschrieben, wann diese Objekte und Quellen erstellt und zerstört, um die Datenübertragungen ordnungsgemäß ausgeführt und einschließt:
Datenobjekte erstellen
Datenobjekte zerstören
Erstellen von Datenquellen
zerstören Datenquellen
Datenobjekte erstellen
Datenobjekte werden von der Zielanwendung — entweder der Client oder Server verwendet.Ein Datenobjekt in der Zielanwendung ist ein Ende einer Verbindung zwischen der Quell-Anwendung und der Zielanwendung.Ein Datenobjekt in der Zielanwendung wird verwendet, um mit den Daten in der Datenquelle zuzugreifen und diese zu interagieren.
Es gibt zwei allgemeine Situationen, in denen ein Datenobjekt benötigt wird.Die erste Situation ist, wenn Daten in Ihrer Anwendung mithilfe von Drag & Drop-Vorgang abgelegt wird.Die zweite Situation ist, wenn Einfügen oder Inhalte einfügen aus dem Menü Bearbeiten ausgewählt ist.
In einer Drag & Drop-Situation ist es nicht erforderlich, um ein Datenobjekt zu erstellen.Ein Zeiger auf einen vorhandenen Datenobjekt wird in der OnDrop-Funktion übergeben.Dieses Datenobjekt wird vom Framework als Teil des Drag & Drop-Vorgangs erstellt, und es wird auch von zerstört werden.Dies ist jedoch nicht immer der Fall, wenn das Einfügen von einer anderen Methode ausgeführt wird.Weitere Informationen finden Sie unter Datenobjekte zerstören.
Wenn die Anwendung eine Einfügen oder eine spezialoperation Einfügen durchführt, sollten Sie ein COleDataObject-Objekt erstellen und dessen AttachClipboard-Memberfunktion aufrufen.Dadurch wird das Datenobjekt mit den Daten in der Zwischenablage.Sie können dieses Datenobjekt in der Funktion zum Einfügen verwenden.
Ein Beispiel dafür, wie dies durchgeführt wird, finden Sie in der DoPasteItem-Funktion in der MAINVIEW.CPP-Datei, die Teil des Beispiels OCLIENT MFC OLE ist.OCLIENT veranschaulicht eine Funktion, die alle Einfügevorgänge ausführen und DoPasteItem von seinem OnDrop, OnPaste und OnPasteLink-Funktionen aufgerufen werden.Da OnDrop einen Zeiger auf ein Datenobjekt, das zuvor übergeben wurde, gibt er den Zeiger auf DoPasteItem weiter.OnPaste und übergeben Sie OnPasteLinkNULL für diesen Parameter, DoPasteItem mitteilend, ein Datenobjekt und Anfügen es in die Zwischenablage zu erstellen.Dieses Schema trennt den Einfügen von Code, sodass er nur an einer Stelle debuggen, aber Sie können es für beide Arten Einfügevorgänge weiterhin verwenden.
Datenobjekte zerstören
Wenn Sie das Schema folgen, das in Datenobjekte erstellen beschriebene Datenobjekte ist ein zerstören trivialer Aspekt von Datenübertragungen.Das Datenobjekt, das der Funktion zum Einfügen von MFC erstellt wurde, wird zerstört, wenn die Funktion zum Einfügen der Rückgabe.
Wenn Sie eine andere Methode für die Behandlung einfügevorgängen halten, stellen Sie sicher, dass das Datenobjekt gelöscht wird, nachdem der Einfügevorgang abgeschlossen ist.Bis das Datenobjekt gelöscht wird, ist es unmöglich, sodass 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 der Datenübertragung die Serverseite erfolgen kann.Eine Datenquelle in der Quell-Anwendung ist ein Ende einer Verbindung zwischen der Quell-Anwendung 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 müssen.gefällt typische Szenarios eines führt dies:
Der Benutzer wählt Daten aus.
Der Benutzer wählt Kopieren (oder Ausschneiden) aus dem Menü aus Bearbeiten ein Drag & Drop-Vorgang beginnt, oder legt diese fest.
Abhängig vom Design des Programms, erstellt die Anwendung entweder ein COleDataSource-Objekt oder ein Objekt einer Klasse, die von COleDataSource abgeleitet ist.
Die ausgewählten Daten werden in die Datenquelle eingefügt, indem eine der Funktionen in den COleDataSource::CacheData oder COleDataSource::DelayRenderData Gruppen aufruft.
Die Anwendung ruft die SetClipboard-Memberfunktion (oder DoDragDrop-Memberfunktion, wenn dies ein Drag & Drop-Vorgang ist), gehörend das Objekt an, das in Schritt 3 erstellte.
Wenn es sich um ein Ausschneiden Vorgang ist, oder DoDragDropDROPEFFECT_MOVE zurückgibt, werden die Daten, die in Schritt 1 ausgewählt werden, aus dem Dokument gelöscht.
Dieses Szenario wird von den Beispielen OCLIENT und HIERSVR OLE MFC implementiert.Betrachten Sie die Quelle CView nach jeder Anwendung abgeleitete Klasse für die GetClipboardData und bis auf OnGetClipboardData-Funktionen.Diese beiden Funktionen sind entweder in COleClientItem oder COleServerItem- Implementierung der abgeleiteten Klasse.Diese Beispielprogramme stellen ein gutes Beispiel dafür, wie diese Konzepte implementiert.
Eine weitere Situation, in der Sie ein COleDataSource-Objekt erstellen müssen, tritt ein, wenn Sie das Standardverhalten eines Drag & Drop-Vorgangs ändern.Weitere Informationen finden Sie im Artikel Drag & Drop: Anpassen.
zerstören Datenquellen
Datenquellen müssen mithilfe der Methode zerstört werden, die für sie gerade zuständig ist.In Situationen, in denen Sie Hand die Datenquelle zu OLE COleDataSource::DoDragDrop, z. B. das Aufrufen von Ihnen pDataSrc->InternalRelease aufrufen müssen.Beispiele:
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 für OLE erfolgreich abgeschlossen wurden, sind Sie für das Zerstören es, z. B. mit einem typischen C++-Objekt verantwortlich.
Weitere Informationen finden Sie unter Drag & Drop, Zwischenablage und Datenobjekte bearbeiten und Datenquellen.