Sdílet prostřednictvím


Formáty schránky

Okno může umístit do schránky více než jeden objekt, z nichž každý představuje stejné informace v jiném formátu schránky. Uživatelé nemusí znát formáty schránky používané pro objekt ve schránce.

Následující témata popisují formáty schránky.

Standardní formáty schránky

Formáty schránky definované systémem se nazývají standardní formáty schránky. Tyto formáty schránky jsou popsány v Standardní formáty schránky.

Registrované formáty schránky

Mnoho aplikací pracuje s daty, která nelze přeložit do standardního formátu schránky bez ztráty informací. Tyto aplikace můžou vytvářet vlastní formáty schránky. Formát schránky, který je definován aplikací, se nazývá registrovaný formát schránky. Pokud například aplikace pro zpracování textu zkopírovala do schránky formátovaný text pomocí standardního textového formátu, informace o formátování by se ztratily. Řešením by bylo zaregistrovat nový formát schránky, například RTF (Rich Text Format).

Pokud chcete zaregistrovat nový formát schránky, použijte funkci RegisterClipboardFormat. Tato funkce přebírá název formátu a vrací celočíselnou hodnotu bez znaménka, která představuje registrovaný formát schránky. Pokud chcete načíst název registrovaného formátu schránky, předejte celočíselnou hodnotu bez znaménka do funkce GetClipboardFormatName.

Pokud více než jedna aplikace zaregistruje formát schránky s přesně stejným názvem, formát schránky se zaregistruje pouze jednou. Obě volání RegisterClipboardFormat funkce vrátí stejnou hodnotu. Tímto způsobem můžou dvě různé aplikace sdílet data pomocí registrovaného formátu schránky.

Formáty privátní schránky

Aplikace může identifikovat soukromý formát schránky definováním hodnoty v rozsahu CF_PRIVATEFIRST prostřednictvím CF_PRIVATELAST. Aplikace může použít privátní formát schránky pro formát dat definovaný aplikací, který nemusí být registrován v systému.

Systém automaticky neuvolní zpracování dat přidružených k privátním formátům schránky. Pokud vaše okna používají soukromé formáty schránky, můžete pomocí zprávy WM_DESTROYCLIPBOARD uvolnit všechny související prostředky, které už nejsou potřeba.

Další informace o zprávě WM_DESTROYCLIPBOARD naleznete v tématu Vlastnictví schránky.

Aplikace může umístit popisovače dat do schránky definováním soukromého formátu v rozsahu CF_GDIOBJFIRST prostřednictvím CF_GDIOBJLAST. Při použití hodnot v této oblasti popisovač dat není popisovač objektu rozhraní GDI (Graphics Device Interface), ale je popisovač přidělený GlobalAlloc funkce s příznakem GMEM_MOVEABLE. Když je schránka vyprázdněna systém automaticky odstraní objekt pomocí funkce GlobalFree.

Více formátů schránky

Okno může umístit do schránky více než jeden objekt schránky, z nichž každý představuje stejné informace v jiném formátu schránky. Při umísťování informací do schránky by okno mělo poskytovat data v co nejvíce formátech. Pokud chcete zjistit, kolik formátů se aktuálně používá ve schránce, zavolejte CountClipboardFormats funkce.

Formáty schránky, které obsahují nejvíce informací, by měly být umístěny do schránky jako první, následované méně popisnými formáty. Při vkládání informací ze schránky se obvykle načte objekt schránky v prvním formátu, který rozpozná. Vzhledem k tomu, že formáty schránky jsou uvedeny v pořadí, v jakém jsou umístěny do schránky, je první rozpoznaný formát také nejvýstižnější.

Předpokládejme například, že uživatel kopíruje stylovaný text z dokumentu pro zpracování textu. Okno obsahující dokument může nejprve umístit data do schránky v registrovaném formátu, například ve formátu RTF. Následně by okno umístilo data do schránky v méně popisném formátu, jako je text (CF_TEXT).

Když se obsah schránky vloží do jiného okna, okno načte data v nejvýstižnějším formátu, který rozpozná. Pokud okno rozpozná rtF, vloží se do dokumentu odpovídající data. Jinak se textová data vloží do dokumentu a informace o formátování se ztratí.

Syntetizované formáty schránky

Systém implicitně převádí data mezi určitými formáty schránky: pokud okno požaduje data ve formátu, který není ve schránce, systém převede dostupný formát na požadovaný formát. Systém může převést data, jak je uvedeno v následující tabulce.

Formát schránky Formát převodu
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

 

Pokud systém poskytuje automatický převod typů pro určitý formát schránky, neexistuje žádná výhoda pro umístění formátů převodu do schránky.

Pokud systém poskytuje automatický převod typů pro určitý formát schránky a voláte EnumClipboardFormats vytvořit výčet datových formátů schránky, systém nejprve vytvoří výčet formátu, který je ve schránce, následované formáty, na které lze převést.

Při kopírování rastrových obrázků je nejlepší umístit CF_DIB nebo CF_DIBV5 formát do schránky. Důvodem je to, že barvy v rastrovém obrázku závislém na zařízení (CF_BITMAP) jsou relativní vzhledem k systémové paletě, která se může před vložením rastrového obrázku změnit. Pokud CF_DIB nebo CF_DIBV5 formát je ve schránce a okno požaduje formát CF_BITMAP, systém vykreslí rastrový obrázek nezávislý na zařízení (DIB) pomocí aktuální palety v té době.

Pokud umístíte formát CF_BITMAP do schránky (a ne CF_DIB), systém vykreslí formát CF_DIB nebo CF_DIBV5 schránky hned po zavření schránky. Tím zajistíte, že se k vygenerování DIB použije správná paleta. Pokud umístíte CF_DIBV5 formát s informacemi o barevném prostoru rastru do schránky, systém při vyžádání CF_DIB nebo CF_DIBV5 převede rastrové bity z barevného prostoru rastrového obrázku na barevný prostor sRGB. Pokud CF_DIBV5 je požadováno, pokud ve schránce nejsou žádné informace o barevném prostoru, systém vrátí informace o barevném prostoru sRGB ve struktuře BITMAPV5HEADER. Převody mezi jinými formáty schránky probíhají na vyžádání.

Pokud schránka obsahuje data ve formátu CF_PALETTE, měla by aplikace použít SelectPalette a RealizePalette funkce k realizaci dalších dat ve schránce s danou logickou paletou.

Existují dva formáty schránky pro metasoubory: CF_ENHMETAFILE a CF_METAFILEPICT. Zadejte CF_ENHMETAFILE pro rozšířené metasoubory a CF_METAFILEPICT pro metasoubory Windows.

Cloudová schránka a formáty historie schránky

Mezi verze Windows patří cloudová schránka, která uchovává historii posledních položek dat schránky a může je synchronizovat mezi zařízeními uživatele. Pokud nechcete, aby data, která vaše aplikace umístí do schránky, byla zahrnuta do historie schránky nebo synchronizovaná s jinými zařízeními, může vaše aplikace toto chování řídit umístěním dat do určitých registrovaných formátů schránky jejichž názvy jsou známé v systému Windows:

  • ExcludeClipboardContentFromMonitorProcessing: Umístěte všechna data do schránky v tomto formátu, aby se zabránilo zahrnutí všech formátů schránky do historie schránky nebo jejich synchronizace s jinými zařízeními uživatele.
  • CanIncludeInClipboardHistory: Umístěte serializovaný DWORD hodnotu nula ve schránce v tomto formátu, aby se zabránilo zahrnutí všech formátů schránky do historie schránky, nebo místo toho umístěte hodnotu 1 místo toho, aby byla položka schránky zahrnuta do historie schránky. To nemá vliv na synchronizaci s jinými zařízeními uživatele.
  • CanUploadToCloudClipboard: Umístěte serializovaný DWORD hodnotu nula ve schránce v tomto formátu, aby se zabránilo synchronizaci všech formátů schránky s jinými zařízeními uživatele, nebo místo toho umístěte hodnotu jednoho, aby byla položka schránky synchronizována s jinými zařízeními. Nemá to vliv na historii schránky místního zařízení.

Stejně jako u jiných registrovaných formátů schránky budete muset použít funkci RegisterClipboardFormat k získání celočíselné hodnoty bez znaménka, která identifikuje každý z výše uvedených formátů 3.