Formate der Zwischenablage
Ein Fenster kann mehrere Objekte in der Zwischenablage platzieren, die jeweils dieselben Informationen in einem anderen Zwischenablageformat darstellen. Benutzer müssen sich nicht über die Formate der Zwischenablage in der Zwischenablage bewusst sein, die für ein Objekt in der Zwischenablage verwendet werden.
In den folgenden Themen werden die Formate der Zwischenablage beschrieben.
- Standard-Zwischenablageformate
- registrierten Zwischenablageformate
- private Zwischenablageformate
- mehrere Zwischenablageformate
- Synthetisierte Zwischenablageformate
- Cloud-Zwischenablage- und Zwischenablageverlaufsformate
Standard-Zwischenablageformate
Die vom System definierten Zwischenablageformate werden Standard-Zwischenablageformategenannt. Diese Zwischenablageformate werden in Standard-Zwischenablageformatebeschrieben.
Registrierte Zwischenablageformate
Viele Anwendungen arbeiten mit Daten, die nicht in ein Standard-Zwischenablageformat übersetzt werden können, ohne dass Informationen verloren gehen. Diese Anwendungen können eigene Zwischenablageformate erstellen. Ein von einer Anwendung definiertes Zwischenablageformat wird als registriertes Zwischenablageformatbezeichnet. Wenn beispielsweise eine Textverarbeitungsanwendung formatierten Text mithilfe eines Standardtextformats in die Zwischenablage kopiert hat, gehen die Formatierungsinformationen verloren. Die Lösung wäre das Registrieren eines neuen Zwischenablageformats, z. B. rich Text Format (RTF).
Um ein neues Zwischenablageformat zu registrieren, verwenden Sie die funktion RegisterClipboardFormat. Diese Funktion verwendet 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 denselben 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 ein Wert im Bereich CF_PRIVATEFIRST bis CF_PRIVATELASTdefiniert wird. 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 verwandte Ressourcen freizugeben, die nicht mehr benötigt werden.
Weitere Informationen zur WM_DESTROYCLIPBOARD Meldung finden Sie unter der Zwischenablage.
Eine Anwendung kann Datenhandles in der Zwischenablage platzieren, indem sie ein privates Format im Bereich CF_GDIOBJFIRST bis CF_GDIOBJLASTdefinieren. Bei Verwendung von Werten in diesem Bereich handelt es sich beim Datenhandle nicht um ein Handle für ein GDI-Objekt (Windows Graphics Device Interface), sondern um ein Handle, das der GlobalAlloc--Funktion mit der GMEM_MOVEABLE-Kennzeichnung zugeordnet ist. Wenn die Zwischenablage geleert wird, löscht das System das Objekt automatisch mithilfe der funktion GlobalFree.
Mehrere Formate der Zwischenablage
Ein Fenster kann mehrere Zwischenablageobjekten in der Zwischenablage platzieren, die jeweils dieselben 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 das Informationen aus der Zwischenablage eingefügt werden, ruft in der Regel ein Zwischenablageobjekt im ersten Format ab, das erkannt wird. Da Zwischenablageformate in der Reihenfolge aufgezählt werden, in der sie in der Zwischenablage platziert werden, ist das erste erkannte Format auch der beschreibendste.
Angenommen, ein Benutzer kopiert formatierten Text aus einem Textverarbeitungsdokument. Das Fenster, das das Dokument enthält, platziert möglicherweise zuerst Daten in der Zwischenablage in einem registrierten Format, z. B. RTF. Anschließend würde das Fenster Daten in der Zwischenablage in einem weniger beschreibenden 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 erkannt wird. 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 werden 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 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, gibt 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 Datenformate der Zwischenablage aufzählen zu können, zählt das System zuerst das Format auf, das sich in der Zwischenablage befindet, gefolgt von den Formaten, in die sie 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 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 (DIB) mit 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 wird. 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 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 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 SelectPalette- und RealizePalette Funktionen verwenden, um andere Daten in der Zwischenablage anhand dieser logischen 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 Windows-Versionen umfassen Cloud-Zwischenablage, wodurch ein Verlauf der zuletzt verwendeten Zwischenablagedatenelemente beibehalten und zwischen den Geräten des Benutzers synchronisiert werden kann. Wenn Die Daten, die Ihre Anwendung in der Zwischenablage platziert, nicht im Zwischenablageverlauf enthalten oder mit anderen Geräten synchronisiert werden sollen, kann Ihre Anwendung dieses Verhalten steuern, indem Sie Daten in bestimmten registrierten Zwischenablageformaten platzieren, deren Namen dem Windows-System bekannt sind:
- ExcludeClipboardContentFromMonitorProcessing: Platzieren Sie alle Daten in der Zwischenablage in diesem Format, um zu verhindern, dass alle Zwischenablageformate im Zwischenablageverlauf enthalten oder mit den anderen Geräten des Benutzers synchronisiert werden.
- CanIncludeInClipboardHistory: Platzieren Sie einen serialisierten DWORD- Wert null in der Zwischenablage in diesem Format, um zu verhindern, dass alle Zwischenablageformate im Zwischenablageverlauf enthalten sind, oder platzieren Sie stattdessen einen Wert von 1, um explizit anzufordern, dass das Zwischenablageelement im Zwischenablageverlauf enthalten ist. Dies wirkt sich nicht auf die Synchronisierung mit den anderen Geräten des Benutzers aus.
- CanUploadToCloudClipboard-: Platzieren Sie einen serialisierten DWORD- Wert null 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 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 Zwischenablageformaten müssen Sie die RegisterClipboardFormat--Funktion verwenden, um einen unsignierten ganzzahligen Wert zu erhalten, der jedes der oben genannten drei Formate identifiziert.