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 anstelleCOleDataSource::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, ruftCOleDataSource::OnRenderData
das Framework auf, das Sie überschreiben müssen.Oder
Wenn Sie ein
CFile
Objekt zum Bereitstellen der Daten verwenden, rufen SieCOleDataSource::DelayRenderFileData
anstelleCOleDataSource::DelayRenderData
der vorherigen Option auf. Wenn die Daten angefordert werden, ruftCOleDataSource::OnRenderFileData
das 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:
Erstellen Sie ein
COleDataObject
Objekt und eine FORMATETC-Struktur .Rufen Sie die Memberfunktion des Datenobjekts
AttachClipboard
auf, um das Datenobjekt den Daten in der Zwischenablage zuzuordnen.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 aufGetNextFormat
, 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