Freigeben über


Datenobjekte und Datenquellen: Manipulation

Hinweis

Die Microsoft Foundation Classes (MFC)-Bibliothek wird weiterhin unterstützt. Wir fügen jedoch keine Features mehr hinzu oder aktualisieren die Dokumentation.

Nachdem ein Datenobjekt oder eine Datenquelle erstellt wurde, können Sie eine Reihe allgemeiner Vorgänge für die Daten ausführen, z. B. Einfügen und Entfernen von Daten, Aufzählen der Formate, in denen sich die Daten befindet, usw. In diesem Artikel werden die Techniken beschrieben, die zum Ausführen der am häufigsten verwendeten Vorgänge erforderlich sind. Dabei werden folgende Themen behandelt:

Einfügen von Daten in eine Datenquelle

Wie Daten in eine Datenquelle eingefügt werden, hängt davon ab, ob die Daten sofort oder nach Bedarf bereitgestellt werden und in welchem Medium sie bereitgestellt wird. Die Möglichkeiten sind wie folgt.

Sofortiges Bereitstellen von Daten (sofortiges Rendering)

  • Rufen Sie COleDataSource::CacheGlobalData wiederholt für jedes Zwischenablageformat auf, in dem Sie Daten bereitstellen. Übergeben Sie das zu verwendende Zwischenablageformat, ein Handle für den Speicher, der die Daten enthält, und, optional, eine FORMATETC-Struktur, die die Daten beschreibt.

    -oder-

  • Wenn Sie direkt mit STGMEDIUM-Strukturen arbeiten möchten, rufen Sie COleDataSource::CacheData anstelle der obigen Option COleDataSource::CacheGlobalData auf.

Bereitstellen von Daten bei Bedarf (verzögertes Rendering)

Dies ist ein erweitertes Thema.

  • Rufen Sie COleDataSource::DelayRenderData wiederholt für jedes Zwischenablageformat auf, in dem Sie Daten bereitstellen. Übergeben Sie das zu verwendende Zwischenablageformat und optional eine FORMATETC-Struktur, die die Daten beschreibt. Wenn die Daten angefordert werden, wird das Framework COleDataSource::OnRenderData aufrufen, das Sie überschreiben müssen.

    -oder-

  • Wenn Sie ein CFile Objekt zum Bereitstellen der Daten verwenden, rufen Sie COleDataSource::DelayRenderFileData anstelle COleDataSource::DelayRenderData der vorherigen Option auf. Wenn die Daten angefordert werden, wird das Framework COleDataSource::OnRenderFileData aufrufen, das Sie überschreiben müssen.

Ermitteln der in einem Datenobjekt verfügbaren Formate

Bevor eine Anwendung dem Benutzer das Einfügen von Daten in die Anwendung ermöglicht, muss sie wissen, ob in der Zwischenablage Formate vorhanden sind, die er verarbeiten kann. Dazu sollte Ihre Anwendung folgendes tun:

  1. Erstellen Sie ein COleDataObject Objekt und eine FORMATETC-Struktur .

  2. Rufen Sie die Memberfunktion AttachClipboard des Datenobjekts auf, um das Datenobjekt mit den Daten in der Zwischenablage zu verknüpfen.

  3. Führen Sie eine der folgenden Aktionen aus:

    • Rufen Sie die Memberfunktion des Datenobjekts IsDataAvailable auf, wenn nur ein oder zwei Formate erforderlich sind. Dadurch sparen Sie Zeit in Fällen, in denen die Daten in der Zwischenablage wesentlich mehr Formate als Ihre Anwendung unterstützen.

      -oder-

    • Rufen Sie die Memberfunktion des Datenobjekts BeginEnumFormats auf, um mit der Aufzählung der in der Zwischenablage verfügbaren Formate zu beginnen. Rufen Sie dann auf GetNextFormat , bis die Zwischenablage ein Format zurückgibt, das Ihre Anwendung unterstützt, oder es gibt keine weiteren Formate.

Wenn Sie ON_UPDATE_COMMAND_UI verwenden, können Sie jetzt die Elemente "Einfügen" und ggf. "Inhalte einfügen" im Menü "Bearbeiten" aktivieren. Rufen Sie dazu entweder CMenu::EnableMenuItem oder CCmdUI::Enable. Weitere Informationen dazu, was Containeranwendungen mit Menüelementen und wann tun sollten, finden Sie unter Menüs und Ressourcen: Containerzufügungen.

Abrufen von Daten aus einem Datenobjekt

Nachdem Sie sich für ein Datenformat entschieden haben, müssen die Daten aus dem Datenobjekt abgerufen werden. Dazu entscheidet der Benutzer, wo die Daten abgelegt werden sollen, und die Anwendung ruft die entsprechende Funktion auf. Die Daten werden in einem der folgenden Medien verfügbar sein:

Mittelstufe Funktion, die aufgerufen werden soll
Globaler Speicher (HGLOBAL) COleDataObject::GetGlobalData
Datei (CFile) COleDataObject::GetFileData
STGMEDIUM-Struktur (IStorage) COleDataObject::GetData

Häufig wird das Medium zusammen mit dem Zwischenablage-Format angegeben. Beispielsweise befindet sich ein CF_EMBEDDEDSTRUCT-Objekt immer in einem IStorage Medium, das eine STGMEDIUM-Struktur erfordert. Daher würden Sie verwenden GetData , da es sich um die einzige dieser Funktionen handelt, die eine STGMEDIUM-Struktur akzeptieren können.

In Fällen, in denen sich das Format der Zwischenablage in einem IStream oder HGLOBAL Medium befindet, kann das Framework einen CFile Zeiger bereitstellen, der auf die Daten verweist. Die Anwendung kann dann die Datei lesen, um die Daten abzurufen, ähnlich wie beim Importieren von Daten aus einer Datei. Im Wesentlichen ist dies die clientseitige Schnittstelle zu den OnRenderData und OnRenderFileData Routinen in der Datenquelle.

Der Benutzer kann nun Daten genau wie alle anderen Daten im selben Format in das Dokument einfügen.

Was möchten Sie mehr über

Siehe auch

Datenobjekte und Datenquellen (OLE)
COleDataObject-Klasse
COleDataSource-Klasse