Datenobjekte und Datenquellen: Bearbeitung

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 wiederholt für jedes Zwischenablageformat auf COleDataSource::CacheGlobalData , in dem Sie Daten bereitstellen. Übergeben Sie das zu verwendende Zwischenablageformat, ein Handle an 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 COleDataSource::CacheData Sie anstelle COleDataSource::CacheGlobalData der oben genannten Option auf.

Bereitstellen von Daten bei Bedarf (verzögertes Rendering)

Dies ist ein erweitertes Thema.

  • Rufen Sie wiederholt für jedes Zwischenablageformat auf COleDataSource::DelayRenderData , in dem Sie Daten bereitstellen. Übergeben Sie das zu verwendende Zwischenablageformat und optional eine FORMATTC-Struktur , die die Daten beschreibt. Wenn die Daten angefordert werden, ruft COleDataSource::OnRenderDatadas Framework auf, 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, ruft COleDataSource::OnRenderFileDatadas Framework auf, 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 des Datenobjekts AttachClipboard auf, um das Datenobjekt den Daten in der Zwischenablage zuzuordnen.

  3. Führen Sie eines der folgenden Verfahren 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, besteht alles darin, die Daten aus dem Datenobjekt abzurufen Standard. 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:

Medium 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 Zwischenablageformat 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 einem Medium befindet, kann das Framework einen CFile Zeiger bereitstellen, der auf die Daten verweist. Die Anwendung kann dann dateilesebar verwenden, um die Daten auf die gleiche Weise abzurufen, wie sie Daten aus einer Datei importieren kann. Im Wesentlichen ist dies die clientseitige Schnittstelle zu den OnRenderData und OnRenderFileData Routinen in der Datenquelle.

Der Benutzer kann nun Daten wie für 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