Delen via


Klembordindelingen

Een venster kan meer dan één object op het klembord plaatsen, elk met dezelfde informatie in een andere klembordindeling. Gebruikers hoeven zich niet bewust te zijn van de klembordindelingen die worden gebruikt voor een object op het klembord.

In de volgende onderwerpen worden de indelingen van het klembord beschreven.

Standaard klembordindelingen

De door het systeem gedefinieerde klembordindelingen worden standaard klembordindelingengenoemd. Deze klembordindelingen worden beschreven in Standaard klembordindelingen.

Geregistreerde klembordindelingen

Veel toepassingen werken met gegevens die niet kunnen worden vertaald in een standaard klembordindeling zonder gegevensverlies. Deze toepassingen kunnen hun eigen klembordindelingen maken. Een klembordindeling die is gedefinieerd door een toepassing, wordt een geregistreerde klembordindelinggenoemd. Als een tekstverwerkingstoepassing bijvoorbeeld opgemaakte tekst naar het klembord heeft gekopieerd met een standaardtekstindeling, gaan de opmaakgegevens verloren. De oplossing is om een nieuwe klembordindeling te registreren, zoals RTF (Rich Text Format).

Als u een nieuwe klembordindeling wilt registreren, gebruikt u de functie RegisterClipboardFormat. Deze functie gebruikt de naam van de notatie en retourneert een niet-ondertekend geheel getal dat de geregistreerde klembordindeling vertegenwoordigt. Als u de naam van de geregistreerde klembordindeling wilt ophalen, geeft u de niet-ondertekende geheel getalwaarde door aan de functie GetClipboardFormatName.

Als meer dan één toepassing een klembordindeling met exact dezelfde naam registreert, wordt de klembordindeling slechts één keer geregistreerd. Beide aanroepen naar de functie RegisterClipboardFormat retourneren dezelfde waarde. Op deze manier kunnen twee verschillende toepassingen gegevens delen met behulp van een geregistreerde klembordindeling.

Persoonlijke Klembord-indelingen

Een toepassing kan een persoonlijke klembordindeling identificeren door een waarde in het bereik te definiëren CF_PRIVATEFIRST via CF_PRIVATELAST. Een toepassing kan een persoonlijke klembordindeling gebruiken voor een door de toepassing gedefinieerde gegevensindeling die niet hoeft te worden geregistreerd bij het systeem.

Gegevensgrepen die zijn gekoppeld aan persoonlijke klembordindelingen, worden niet automatisch door het systeem vrijgemaakt. Als in uw vensters persoonlijke klembordindelingen worden gebruikt, kunt u het WM_DESTROYCLIPBOARD bericht gebruiken om gerelateerde resources vrij te maken die niet meer nodig zijn.

Zie Klembordeigendomvoor meer informatie over het WM_DESTROYCLIPBOARD bericht.

Een toepassing kan gegevensgrepen op het klembord plaatsen door een persoonlijke indeling in het bereik te definiëren CF_GDIOBJFIRST via CF_GDIOBJLAST. Wanneer u waarden in dit bereik gebruikt, is de gegevensgreep geen ingang voor een GDI-object (Windows Graphics Device Interface), maar een ingang die wordt toegewezen door de GlobalAlloc--functie met de vlag GMEM_MOVEABLE. Wanneer het klembord wordt leeggemaakt, wordt het object automatisch verwijderd met behulp van de functie GlobalFree.

Meerdere Klembord-indelingen

Een venster kan meer dan één klembordobject op het klembord plaatsen, elk met dezelfde informatie in een andere klembordindeling. Wanneer u informatie op het klembord plaatst, moet het venster gegevens in zoveel mogelijk indelingen opgeven. Als u wilt zien hoeveel indelingen momenteel op het klembord worden gebruikt, roept u de functie CountClipboardFormats aan.

De klembordindelingen die de meeste informatie bevatten, moeten eerst op het klembord worden geplaatst, gevolgd door minder beschrijvende indelingen. Een venster dat informatie van het Klembord plakt, haalt doorgaans een klembordobject op in de eerste indeling die wordt herkend. Omdat klembordindelingen worden opgesomd in de volgorde waarin ze op het klembord worden geplaatst, is de eerste herkende indeling ook de meest beschrijvende indeling.

Stel dat een gebruiker gestijlde tekst kopieert uit een tekstverwerkingsdocument. Het venster met het document kan eerst gegevens op het klembord plaatsen in een geregistreerde indeling, zoals RTF. Vervolgens plaatst het venster gegevens op het klembord in een minder beschrijvende indeling, zoals tekst (CF_TEXT).

Wanneer de inhoud van het klembord in een ander venster wordt geplakt, haalt het venster gegevens op in de meest beschrijvende indeling die wordt herkend. Als het venster RTF herkent, worden de bijbehorende gegevens in het document geplakt. Anders worden de tekstgegevens in het document geplakt en gaan de opmaakgegevens verloren.

Gesynthetiseerde Klembord-indelingen

Het systeem converteert impliciet gegevens tussen bepaalde klembordindelingen: als een venster gegevens aanvraagt in een indeling die niet op het klembord staat, converteert het systeem een beschikbare indeling naar de aangevraagde indeling. Het systeem kan gegevens converteren zoals aangegeven in de volgende tabel.

Klembordindeling Conversie-indeling
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

 

Als het systeem een automatische typeconversie biedt voor een bepaalde klembordindeling, is het niet handig om de conversieindeling(en) op het klembord te plaatsen.

Als het systeem een automatische typeconversie biedt voor een bepaalde klembordindeling en u EnumClipboardFormats aanroept om de gegevensindelingen van het klembord op te sommen, geeft het systeem eerst een opsomming van de indeling die zich op het klembord bevindt, gevolgd door de indelingen waarnaar het kan worden geconverteerd.

Wanneer u bitmaps kopieert, kunt u het beste de CF_DIB of CF_DIBV5 indeling op het klembord plaatsen. Dit komt doordat de kleuren in een apparaatafhankelijke bitmap (CF_BITMAP) relatief zijn ten opzichte van het systeempalet, wat kan veranderen voordat de bitmap wordt geplakt. Als de CF_DIB- of CF_DIBV5-indeling zich op het klembord bevindt en een venster de CF_BITMAP-indeling aanvraagt, wordt op dat moment de apparaatonafhankelijke bitmap (DIB) weergegeven met behulp van het huidige palet.

Als u de CF_BITMAP-indeling op het klembord plaatst (en niet CF_DIB), wordt de CF_DIB- of CF_DIBV5 klembordindeling weergegeven zodra het klembord is gesloten. Dit zorgt ervoor dat het juiste palet wordt gebruikt om de DIB te genereren. Als u de CF_DIBV5-indeling plaatst met de informatie over de bitmapkleurruimte op het klembord, converteert het systeem de bitmapbits van de bitmapkleurruimte naar de sRGB-kleurruimte wanneer CF_DIB of CF_DIBV5 wordt aangevraagd. Als CF_DIBV5 wordt aangevraagd wanneer er geen kleurruimteinformatie op het klembord staat, retourneert het systeem sRGB-kleurruimtegegevens in de BITMAPV5HEADER structuur. Conversies tussen andere klembordindelingen vinden op aanvraag plaats.

Als het klembord gegevens in de CF_PALETTE-indeling bevat, moet de toepassing de SelectPalette- en RealizePalette functies gebruiken om andere gegevens in het klembord te realiseren op basis van dat logische palet.

Er zijn twee klembordindelingen voor metabestanden: CF_ENHMETAFILE en CF_METAFILEPICT. Geef CF_ENHMETAFILE op voor uitgebreide metabestanden en CF_METAFILEPICT voor Windows-metabestanden.

Geschiedenisindelingen voor Cloud Klembord en Klembord

Sommige versies van Windows bevatten Cloud Klembord, waarmee een geschiedenis van recente gegevensitems van het klembord wordt bijgehouden en deze kan worden gesynchroniseerd tussen de apparaten van de gebruiker. Als u niet wilt dat de gegevens die uw toepassing op het klembord plaatst, worden opgenomen in de geschiedenis van het klembord of worden gesynchroniseerd met andere apparaten, kan uw toepassing dit gedrag beheren door gegevens in bepaalde geregistreerde klembordindelingen te plaatsen waarvan de namen bekend zijn bij het Windows-systeem:

  • ExcludeClipboardContentFromMonitorProcessing: plaats gegevens op het klembord in deze indeling om te voorkomen dat alle klembordindelingen worden opgenomen in de geschiedenis van het klembord of worden gesynchroniseerd met de andere apparaten van de gebruiker.
  • CanIncludeInClipboardHistory: Plaats een geserialiseerde DWORD waarde van nul op het klembord in deze indeling om te voorkomen dat alle klembordindelingen worden opgenomen in de geschiedenis van het klembord of plaats een waarde van één om expliciet aan te vragen dat het klemborditem wordt opgenomen in de geschiedenis van het klembord. Dit heeft geen invloed op synchronisatie met de andere apparaten van de gebruiker.
  • CanUploadToCloudClipboard: plaats een geserialiseerde DWORD- waarde nul op het klembord in deze indeling om te voorkomen dat alle klembordindelingen worden gesynchroniseerd met de andere apparaten van de gebruiker, of plaats een waarde van een in plaats daarvan om expliciet aan te vragen dat het klemborditem wordt gesynchroniseerd met andere apparaten. Dit heeft geen invloed op de geschiedenis van het klembord van het lokale apparaat.

Net als bij andere geregistreerde klembordindelingen moet u de functie RegisterClipboardFormat gebruiken om een niet-ondertekend geheel getal te verkrijgen waarmee elk van de bovenstaande 3 indelingen wordt geïdentificeerd.