Zwischenablageformate
Ein Fenster kann mehrere Objekte in der Zwischenablage platzieren, die jeweils die gleichen Informationen in einem anderen Zwischenablageformat darstellen. Benutzer müssen die Zwischenablageformate nicht kennen, die für ein Objekt in der Zwischenablage verwendet werden.
In den folgenden Themen werden die Zwischenablageformate 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 Standardmäßige Zwischenablageformate bezeichnet. Diese Zwischenablageformate werden unter Standard-Zwischenablageformatebeschrieben.
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 Zwischenablageformatbezeichnet. Wenn eine Textverarbeitungsanwendung beispielsweise formatierten Text mit einem Standardtextformat in die Zwischenablage kopiert, geht die Formatierungsinformation verloren. Die Lösung wäre die Registrierung eines neuen Zwischenablageformats, z. B. Rich Text Format (RTF).
Verwenden Sie die RegisterClipboardFormat-Funktion, 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 Ganzzahlwert 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 vom System nicht automatisch freigegeben. Wenn Ihre Fenster private Zwischenablageformate verwenden, können Sie die WM _ DESTROYCLIPBOARD-Nachricht verwenden, um alle zugehörigen 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 sie ein privates Format im Bereich CF _ GDIOBJFIRST bis CF _ GDIOBJLAST definiert. Bei Verwendung von Werten in diesem Bereich ist das Datenhandle kein Handle für ein GDI-Objekt (Windows Graphics Device Interface), sondern ein Handle, das von der GlobalAlloc-Funktion mit dem GMEM _ MOVEABLE-Flag 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. Um herauszufinden, wie viele Formate derzeit in der Zwischenablage verwendet werden, rufen Sie die CountClipboardFormats-Funktion auf.
Zwischenablageformate, die die meisten Informationen enthalten, sollten zuerst in der Zwischenablage platziert werden, gefolgt von weniger beschreibenden Formaten. Ein Fenster, in dem Informationen aus der Zwischenablage eingefügt werden, ruft in der Regel ein Zwischenablageobjekt im ersten format ab, das es erkennt. Da Zwischenablageformate in der Reihenfolge aufgeführt werden, in der sie in der Zwischenablage platziert werden, ist das erste erkannte Format auch das beschreibendste Format.
Angenommen, ein Benutzer kopiert formatierten Text aus einem Textverarbeitungsdokument. Das Fenster, das das Dokument enthält, kann Daten zuerst in der Zwischenablage in einem registrierten Format platzieren, z. B. RTF. Anschließend würde das Fenster Daten in der Zwischenablage in einem weniger aussagekräftigen Format platzieren, z. B. Text (CF _ TEXT).
Wenn der Inhalt der Zwischenablage in ein anderes Fenster eingefügt wird, ruft das Fenster Daten im 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 verloren.
Synthetisierte Zwischenablageformate
Das System konvertiert Daten implizit 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 wie in der folgenden Tabelle angegeben konvertieren.
| 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, bietet es keinen 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, das CF _ DIB- oder CF _ DIBV5-Format 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 einfing. Wenn sich das CF _ DIB- oder CF _ DIBV5-Format in der Zwischenablage befindet und ein Fenster das CF _ BITMAP-Format an fordert, rendert das System die geräteunabhängige Bitmap (DEVICE-Independent Bitmap, DIB) mithilfe der aktuellen Palette zu diesem Zeitpunkt.
Wenn Sie das _ CF-BITMAP-Format in der Zwischenablage (und nicht in CF _ DIB) platzieren, 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 Bitmapfarbrauminformationen in der Zwischenablage platzieren, konvertiert das System die Bitmapbits 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 enthalten 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.
Verlaufsformate für Cloud-Zwischenablage und Zwischenablage
Einige Versionen von Windows cloud clipboardenthalten, die einen Verlauf der letzten Datenelemente der Zwischenablage speichert und 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, kann Ihre Anwendung dieses Verhalten steuern, indem Daten in bestimmten registrierten Zwischenablageformaten platziert werden, deren Namen dem Windows-System bekannt sind:
- ExcludeClipboardContentFromMonitorProcessing: Platzieren Sie alle Daten in der Zwischenablage in diesem Format, um zu verhindern, dass alle Zwischenablageformate in den Zwischenablageverlauf aufgenommen oder mit den anderen Geräten des Benutzers synchronisiert werden.
- CanIncludeInClipboardHistory: Platzieren Sie den serialisierten DWORD-Wert 0 in der Zwischenablage in diesem Format, um zu verhindern, dass alle Zwischenablageformate in den Zwischenablageverlauf eingeschlossen werden, oder platzieren Sie stattdessen einen Wert von 1, um explizit an die Einschlussanforderung des Zwischenablageelements in den Zwischenablageverlauf zu stellen. Dies wirkt sich nicht auf die Synchronisierung mit den anderen Geräten des Benutzers aus.
- CanUploadToCloudClipboard: Platzieren Sie den serialisierten DWORD-Wert 0 in der Zwischenablage in diesem Format, um zu verhindern, dass alle Zwischenablageformate mit den anderen Geräten des Benutzers synchronisiert werden, oder platzieren Sie stattdessen einen Wert von 1, um explizit die Synchronisierung des Zwischenablageelements mit anderen Geräten an fordern. Dies wirkt sich nicht auf den Verlauf der Zwischenablage des lokalen Geräts aus.
Wie bei anderen registrierten Zwischenablageformaten müssen Sie die RegisterClipboardFormat-Funktion verwenden, um einen ganzzahligen Wert ohne Vorzeichen zu erhalten, der jedes der oben genannten drei Formate identifiziert.