Zwischenablageformate
Ein Fenster kann mehrere Objekte in der Zwischenablage platzieren, die jeweils die gleichen Informationen in einem anderen Zwischenablageformat darstellen. Benutzer müssen nicht wissen, welche Zwischenablageformate für ein Objekt in der Zwischenablage verwendet werden.
In den folgenden Themen werden die Formate der Zwischenablage beschrieben.
- Standardformate der Zwischenablage
- Registrierte Zwischenablageformate
- Private Zwischenablageformate
- Mehrere Zwischenablageformate
- Synthetisierte Zwischenablageformate
- Cloud-Zwischenablage- und Zwischenablageverlaufsformate
Standardformate der Zwischenablage
Die vom System definierten Zwischenablageformate werden als Standardformate der Zwischenablage bezeichnet. Diese Zwischenablageformate werden unter Standard-Zwischenablageformate beschrieben.
Registrierte Zwischenablageformate
Viele Anwendungen arbeiten mit Daten, die nicht ohne Informationsverlust in ein Standardformat der Zwischenablage übersetzt werden können. Diese Anwendungen können eigene Zwischenablageformate erstellen. Ein Von einer Anwendung definiertes Zwischenablageformat wird als registriertes Zwischenablageformat bezeichnet. Wenn beispielsweise eine Textverarbeitungsanwendung formatierten Text mithilfe eines Standardtextformats in die Zwischenablage kopiert hat, gehen die Formatierungsinformationen verloren. Die Lösung wäre, ein neues Zwischenablageformat zu registrieren, z. B. Rich Text Format (RTF).
Verwenden Sie die Funktion RegisterClipboardFormat , um ein neues Zwischenablageformat zu registrieren. Diese Funktion akzeptiert den Namen des Formats und gibt einen ganzzahligen Wert ohne Vorzeichen zurück, der das registrierte Zwischenablageformat darstellt. Um den Namen des registrierten Zwischenablageformats abzurufen, übergeben Sie den ganzzahligen Wert ohne Vorzeichen an die GetClipboardFormatName-Funktion .
Wenn mehrere Anwendungen ein Zwischenablageformat mit genau demselben Namen registrieren, wird das Zwischenablageformat nur einmal registriert. Beide Aufrufe der RegisterClipboardFormat-Funktion geben den gleichen Wert zurück. Auf diese Weise können zwei verschiedene Anwendungen Daten mithilfe eines registrierten Zwischenablageformats freigeben.
Private Zwischenablageformate
Eine Anwendung kann ein privates Zwischenablageformat identifizieren, indem sie einen Wert im Bereich CF_PRIVATEFIRST bis CF_PRIVATELAST definiert. Eine Anwendung kann ein privates Zwischenablageformat für ein anwendungsdefiniertes Datenformat verwenden, das nicht beim System registriert werden muss.
Datenhandles, die privaten Zwischenablageformaten zugeordnet sind, werden nicht automatisch vom System freigegeben. Wenn Ihre Fenster private Zwischenablageformate verwenden, können Sie die WM_DESTROYCLIPBOARD Nachricht verwenden, um verwandte Ressourcen freizugeben, die nicht mehr benötigt werden.
Weitere Informationen zur WM_DESTROYCLIPBOARD Meldung finden Sie unter Besitz der Zwischenablage.
Eine Anwendung kann Datenhandles in der Zwischenablage platzieren, indem ein privates Format im Bereich CF_GDIOBJFIRST bis CF_GDIOBJLAST definiert wird. Wenn Sie Werte in diesem Bereich verwenden, ist das Datenhandle kein Handle für ein GDI-Objekt (Windows Graphics Device Interface), sondern ein Handle, das von der GlobalAlloc-Funktion mit dem flag GMEM_MOVEABLE zugeordnet wird. Wenn die Zwischenablage geleert wird, löscht das System das Objekt automatisch mithilfe der GlobalFree-Funktion .
Mehrere Zwischenablageformate
Ein Fenster kann mehrere Zwischenablageobjekte in der Zwischenablage platzieren, die jeweils die gleichen Informationen in einem anderen Zwischenablageformat darstellen. Beim Platzieren von Informationen in der Zwischenablage sollte das Fenster Daten in so vielen Formaten wie möglich bereitstellen. Rufen Sie die CountClipboardFormats-Funktion auf, um herauszufinden, wie viele Formate derzeit in der Zwischenablage verwendet werden.
Zwischenablageformate, die die meisten Informationen enthalten, sollten zuerst in der Zwischenablage platziert werden, gefolgt von weniger beschreibenden Formaten. Ein Fenster, das Informationen aus der Zwischenablage eingibt, ruft in der Regel ein Zwischenablageobjekt im ersten Format ab, das es erkennt. Da Zwischenablageformate in der Reihenfolge aufgezählt werden, in der sie in der Zwischenablage platziert werden, ist das erste erkannte Format auch das beschreibendste.
Angenommen, ein Benutzer kopiert formatierten Text aus einem Textverarbeitungsdokument. Das Fenster, das das Dokument enthält, platziert möglicherweise zuerst Daten in einem registrierten Format, z. B. RTF, in der Zwischenablage. Anschließend platziert das Fenster Daten in der Zwischenablage in einem weniger beschreibenden Format, z. B. Text (CF_TEXT).
Wenn der Inhalt der Zwischenablage in ein anderes Fenster eingefügt wird, ruft das Fenster Daten in dem beschreibendsten Format ab, das es erkennt. Wenn das Fenster RTF erkennt, werden die entsprechenden Daten in das Dokument eingefügt. Andernfalls werden die Textdaten in das Dokument eingefügt, und die Formatierungsinformationen sind verloren.
Synthetisierte Zwischenablageformate
Das System konvertiert Implizit Daten zwischen bestimmten Zwischenablageformaten: Wenn ein Fenster Daten in einem Format anfordert, das sich nicht in der Zwischenablage befindet, konvertiert das System ein verfügbares Format in das angeforderte Format. Das System kann Daten konvertieren, wie in der folgenden Tabelle angegeben.
Zwischenablageformat | Konvertierungsformat |
---|---|
CF_BITMAP | CF_DIB |
CF_BITMAP | CF_DIBV5 |
CF_DIB | CF_BITMAP |
CF_DIB | CF_PALETTE |
CF_DIB | CF_DIBV5 |
CF_DIBV5 | CF_BITMAP |
CF_DIBV5 | CF_DIB |
CF_DIBV5 | CF_PALETTE |
CF_ENHMETAFILE | CF_METAFILEPICT |
CF_METAFILEPICT | CF_ENHMETAFILE |
CF_OEMTEXT | CF_TEXT |
CF_OEMTEXT | CF_UNICODETEXT |
CF_TEXT | CF_OEMTEXT |
CF_TEXT | CF_UNICODETEXT |
CF_UNICODETEXT | CF_OEMTEXT |
CF_UNICODETEXT | CF_TEXT |
Wenn das System eine automatische Typkonvertierung für ein bestimmtes Zwischenablageformat bereitstellt, ist es kein Vorteil, die Konvertierungsformate in der Zwischenablage zu platzieren.
Wenn das System eine automatische Typkonvertierung für ein bestimmtes Zwischenablageformat bereitstellt und Sie EnumClipboardFormats aufrufen, um die Zwischenablagedatenformate aufzulisten, listet das System zuerst das Format auf, das sich in der Zwischenablage befindet, gefolgt von den Formaten, in die es konvertiert werden kann.
Beim Kopieren von Bitmaps empfiehlt es sich, die CF_DIB oder das format CF_DIBV5 in der Zwischenablage zu platzieren. Dies liegt daran, dass die Farben in einer geräteabhängigen Bitmap (CF_BITMAP) relativ zur Systempalette sind, die sich ändern kann, bevor die Bitmap eingefügt wird. Wenn sich das CF_DIB - oder CF_DIBV5 format in der Zwischenablage befindet und ein Fenster das CF_BITMAP Format anfordert, rendert das System die geräteunabhängige Bitmap (DEVICE-Independent Bitmap, DIB) unter Verwendung der aktuellen Palette zu diesem Zeitpunkt.
Wenn Sie das CF_BITMAP Format in der Zwischenablage platzieren (und nicht CF_DIB), rendert das System das CF_DIB - oder CF_DIBV5 Zwischenablageformat, sobald die Zwischenablage geschlossen ist. Dadurch wird sichergestellt, dass die richtige Palette zum Generieren des DIB verwendet wird. Wenn Sie das CF_DIBV5 Format mit den Informationen zum Bitmapfarbraum in der Zwischenablage platzieren, konvertiert das System die Bits aus dem Bitmapfarbraum in den sRGB-Farbraum, wenn CF_DIB oder CF_DIBV5 angefordert wird. Wenn CF_DIBV5 angefordert wird, wenn keine Farbrauminformationen in der Zwischenablage vorhanden sind, gibt das System sRGB-Farbrauminformationen in der BITMAPV5HEADER-Struktur zurück. Konvertierungen zwischen anderen Zwischenablageformaten erfolgen bei Bedarf.
Wenn die Zwischenablage Daten im CF_PALETTE-Format enthält, sollte die Anwendung die Funktionen SelectPalette und RealizePalette verwenden, um alle anderen Daten in der Zwischenablage für diese logische Palette zu realisieren.
Es gibt zwei Zwischenablageformate für Metadateien: CF_ENHMETAFILE und CF_METAFILEPICT. Geben Sie CF_ENHMETAFILE für erweiterte Metadateien und CF_METAFILEPICT für Windows-Metadateien an.
Cloud-Zwischenablage- und Zwischenablageverlaufsformate
Einige Versionen von Windows enthalten Cloudablage, die einen Verlauf der letzten Zwischenablagedatenelemente speichert und sie zwischen den Geräten des Benutzers synchronisieren kann. Wenn Sie nicht möchten, dass die Daten, die Ihre Anwendung in der Zwischenablage platziert, in den Zwischenablageverlauf aufgenommen oder mit anderen Geräten synchronisiert werden sollen, kann Ihre Anwendung dieses Verhalten steuern, indem Sie Daten in bestimmte registrierte Zwischenablageformate platziert, deren Namen dem Windows-System bekannt sind:
- ExcludeClipboardContentFromMonitorProcessing : Platzieren Sie alle Daten in diesem Format in der Zwischenablage, um zu verhindern, dass alle Zwischenablageformate in den Zwischenablageverlauf aufgenommen oder mit anderen Geräten des Benutzers synchronisiert werden.
- CanIncludeInClipboardHistory : Platzieren Sie in diesem Format den serialisierten DWORD-Wert 0 in der Zwischenablage, um zu verhindern, dass alle Zwischenablageformate in den Zwischenablageverlauf aufgenommen werden, oder platzieren Sie stattdessen einen Wert von 1, um die Aufnahme des Zwischenablageelements in den Zwischenablageverlauf explizit anzufordern. Dies wirkt sich nicht auf die Synchronisierung mit den anderen Geräten des Benutzers aus.
- CanUploadToCloudClipboard : Platzieren Sie den serialisierten DWORD-Wert 0 (null) in der Zwischenablage in diesem Format, um zu verhindern, dass alle Zwischenablageformate mit den anderen Geräten des Benutzers synchronisiert werden, oder legen Sie stattdessen den Wert 1 ein, um explizit anzufordern, dass das Zwischenablageelement mit anderen Geräten synchronisiert wird. Dies wirkt sich nicht auf den Zwischenablageverlauf des lokalen Geräts aus.
Wie bei anderen registrierten Zwischenablageformatformaten müssen Sie die RegisterClipboardFormat-Funktion verwenden, um einen ganzzahligen Wert ohne Vorzeichen zu erhalten, der jedes der oben genannten 3 Formate identifiziert.