Dela via


Format för Urklipp

Ett fönster kan placera fler än ett objekt i Urklipp, var och en representerar samma information i ett annat Urklippsformat. Användarna behöver inte känna till de Urklippsformat som används för ett objekt i Urklipp.

Följande avsnitt beskriver Format för Urklipp.

Standardformat för Urklipp

Urklippsformaten som definieras av systemet kallas standardformat för Urklipp. Dessa Urklippsformat beskrivs i standardformat för Urklipp.

Registrerade Urklippsformat

Många program fungerar med data som inte kan översättas till ett standardformat för Urklipp utan informationsförlust. Dessa program kan skapa egna Urklippsformat. Ett Urklippsformat som definieras av ett program kallas för ett registrerat Urklippsformat. Om ett ordbehandlingsprogram till exempel kopierade formaterad text till Urklipp med ett standardtextformat skulle formateringsinformationen gå förlorad. Lösningen skulle vara att registrera ett nytt Urklippsformat, till exempel RTF (RTF).

Om du vill registrera ett nytt Urklippsformat använder du funktionen RegisterClipboardFormat. Den här funktionen tar namnet på formatet och returnerar ett osignerat heltalsvärde som representerar det registrerade Urklippsformatet. Om du vill hämta namnet på det registrerade Urklippsformatet skickar du det osignerade heltalsvärdet till funktionen GetClipboardFormatName.

Om fler än ett program registrerar ett Urklippsformat med exakt samma namn registreras Urklippsformatet bara en gång. Båda anropen till funktionen RegisterClipboardFormat returnerar samma värde. På så sätt kan två olika program dela data med hjälp av ett registrerat Urklippsformat.

Privata Urklippsformat

Ett program kan identifiera ett privat Urklippsformat genom att definiera ett värde i intervallet CF_PRIVATEFIRST via CF_PRIVATELAST. Ett program kan använda ett privat Urklippsformat för ett programdefinierat dataformat som inte behöver registreras med systemet.

Datahandtag som är associerade med privata Urklippsformat frigörs inte automatiskt av systemet. Om dina fönster använder privata Urklippsformat kan du använda WM_DESTROYCLIPBOARD-meddelandet för att frigöra relaterade resurser som inte längre behövs.

Mer information om WM_DESTROYCLIPBOARD-meddelandet finns i Ägarskap för Urklipp.

Ett program kan placera datahandtag i Urklipp genom att definiera ett privat format i intervallet CF_GDIOBJFIRST via CF_GDIOBJLAST. När du använder värden i det här intervallet är datahandtaget inte ett handtag till ett GDI-objekt (Windows Graphics Device Interface), utan är ett handtag som allokeras av funktionen GlobalAlloc med flaggan GMEM_MOVEABLE. När Urklipp töms tar systemet automatiskt bort objektet med hjälp av funktionen GlobalFree.

Flera Urklippsformat

Ett fönster kan placera fler än ett Urklippsobjekt i Urklipp, var och en representerar samma information i ett annat Urklippsformat. När du placerar information på Urklipp bör fönstret tillhandahålla data i så många format som möjligt. Om du vill ta reda på hur många format som används i Urklipp anropar du funktionen CountClipboardFormats.

Urklippsformat som innehåller mest information bör placeras i Urklipp först, följt av mindre beskrivande format. Ett fönster som klistrar in information från Urklipp hämtar vanligtvis ett Urklippsobjekt i det första format som det känner igen. Eftersom Urklippsformat räknas upp i den ordning de placeras i Urklipp är det första identifierade formatet också det mest beskrivande.

Anta till exempel att en användare kopierar formaterad text från ett ordbearbetningsdokument. Fönstret som innehåller dokumentet kan först placera data i Urklipp i ett registrerat format, till exempel RTF. Därefter skulle fönstret placera data i Urklipp i ett mindre beskrivande format, till exempel text (CF_TEXT).

När innehållet i Urklipp klistras in i ett annat fönster hämtar fönstret data i det mest beskrivande format som det känner igen. Om fönstret känner igen RTF klistras motsvarande data in i dokumentet. Annars klistras textdata in i dokumentet och formateringsinformationen går förlorad.

Syntetiserade Urklippsformat

Systemet konverterar implicit data mellan vissa Urklippsformat: om ett fönster begär data i ett format som inte finns i Urklipp konverterar systemet ett tillgängligt format till det begärda formatet. Systemet kan konvertera data enligt följande tabell.

Urklippsformat Konverteringsformat
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

 

Om systemet tillhandahåller en automatisk typkonvertering för ett visst Urklippsformat finns det ingen fördel med att placera konverteringsformaten i Urklipp.

Om systemet tillhandahåller en automatisk typkonvertering för ett visst Urklippsformat, och du anropar EnumClipboardFormats för att räkna upp dataformaten för Urklipp, räknar systemet först upp formatet som finns i Urklipp följt av de format som det kan konverteras till.

När du kopierar bitmappar är det bäst att placera CF_DIB- eller CF_DIBV5-formatet i Urklipp. Det beror på att färgerna i en enhetsberoende bitmapp (CF_BITMAP) är relativa till systempaletten, som kan ändras innan bitmappen klistras in. Om formatet CF_DIB eller CF_DIBV5 finns i Urklipp och ett fönster begär CF_BITMAP format, renderar systemet den enhetsoberoende bitmappen (DIB) med den aktuella paletten vid den tidpunkten.

Om du placerar CF_BITMAP format på Urklipp (och inte CF_DIB) renderar systemet CF_DIB- eller CF_DIBV5 Urklippsformat så snart Urklipp stängs. Detta säkerställer att rätt palett används för att generera DIB. Om du placerar CF_DIBV5 format med information om bitmappens färgrymd i Urklipp konverterar systemet bitmappsbitarna från bitmappens färgrymd till sRGB-färgrymden när CF_DIB eller CF_DIBV5 begärs. Om CF_DIBV5 begärs när det inte finns någon färgrymdsinformation i Urklipp returnerar systemet sRGB-färgrymdsinformation i BITMAPV5HEADER struktur. Konverteringar mellan andra Urklippsformat sker på begäran.

Om Urklipp innehåller data i CF_PALETTE format bör programmet använda SelectPalette och RealizePalette funktioner för att förverkliga andra data i Urklipp mot den logiska paletten.

Det finns två Format för Urklipp för metafiler: CF_ENHMETAFILE och CF_METAFILEPICT. Ange CF_ENHMETAFILE för förbättrade metafiler och CF_METAFILEPICT för Windows-metafiler.

Historikformat för Urklipp och Urklipp i molnet

Vissa versioner av Windows inkluderar Cloud Urklipp, som behåller en historik över de senaste Urklippsdataobjekten och kan synkronisera dem mellan användarens enheter. Om du inte vill att de data som programmet placerar i Urklipp ska inkluderas i Urklippshistoriken eller synkroniseras med andra enheter, kan programmet styra det här beteendet genom att placera data i vissa registrerade Urklippsformat vars namn är kända för Windows-systemet:

  • ExcludeClipboardContentFromMonitorProcessing : Placera data i Urklipp i det här formatet för att förhindra att alla Urklippsformat ingår i Urklippshistoriken eller synkroniseras med användarens andra enheter.
  • CanIncludeInClipboardHistory : Placera ett serialiserat DWORD- värdet noll på Urklipp i det här formatet för att förhindra att alla Urklippsformat inkluderas i Urklippshistoriken, eller placera ett värde på ett i stället för att uttryckligen begära att Urklippsobjektet ska ingå i Urklippshistoriken. Detta påverkar inte synkroniseringen till användarens andra enheter.
  • CanUploadToCloudClipboard : Placera ett serialiserat DWORD- värdet noll på Urklipp i det här formatet för att förhindra att alla Urklippsformat synkroniseras med användarens andra enheter eller placera ett värde på en i stället för att uttryckligen begära att Urklippsobjektet synkroniseras till andra enheter. Detta påverkar inte den lokala enhetens Urklippshistorik.

Precis som med andra registrerade Urklippsformat måste du använda funktionen RegisterClipboardFormat för att hämta ett heltalsvärde som identifierar vart och ett av de tre ovanstående formaten.