Partilhar via


Formatos da área de transferência

Uma janela pode colocar mais de um objeto na área de transferência, cada um representando as mesmas informações em um formato diferente da área de transferência. Os usuários não precisam estar cientes dos formatos da área de transferência usados para um objeto na área de transferência.

Os tópicos a seguir descrevem os formatos da área de transferência.

Formatos padrão da área de transferência

Os formatos de área de transferência definidos pelo sistema são chamados formatos padrão da área de transferência. Esses formatos de área de transferência são descritos em Formatos padrão da área de transferência.

Formatos de área de transferência registrados

Muitos aplicativos trabalham com dados que não podem ser traduzidos em um formato de área de transferência padrão sem perda de informações. Esses aplicativos podem criar seus próprios formatos de área de transferência. Um formato de área de transferência definido por um aplicativo é chamado de formato de área de transferência registrado . Por exemplo, se um aplicativo de processamento de texto copiasse texto formatado para a área de transferência usando um formato de texto padrão, as informações de formatação seriam perdidas. A solução seria registrar um novo formato de área de transferência, como Rich Text Format (RTF).

Para registrar um novo formato de área de transferência, use a funçãoRegisterClipboardFormat. Esta função usa o nome do formato e retorna um valor inteiro não assinado que representa o formato da área de transferência registrado. Para recuperar o nome do formato da área de transferência registrado, passe o valor inteiro não assinado para a funçãoGetClipboardFormatName.

Se mais de um aplicativo registrar um formato de área de transferência com exatamente o mesmo nome, o formato da área de transferência será registrado apenas uma vez. Ambas as chamadas para a funçãoRegisterClipboardFormat retornam o mesmo valor. Desta forma, dois aplicativos diferentes podem compartilhar dados usando um formato de área de transferência registrado.

Formatos de Área de Transferência Privada

Um aplicativo pode identificar um formato de área de transferência privada definindo um valor no intervalo CF_PRIVATEFIRST a CF_PRIVATELAST. Um aplicativo pode usar um formato de área de transferência privada para um formato de dados definido pelo aplicativo que não precisa ser registrado no sistema.

Os identificadores de dados associados a formatos de área de transferência privados não são liberados automaticamente pelo sistema. Se as janelas utilizarem formatos de área de transferência privados, pode utilizar a mensagem WM_DESTROYCLIPBOARD para libertar quaisquer recursos relacionados que já não sejam necessários.

Para obter mais informações sobre a mensagem WM_DESTROYCLIPBOARD, consulte de propriedade da área de transferência.

Um aplicativo pode colocar identificadores de dados na área de transferência definindo um formato privado no intervalo CF_GDIOBJFIRST até CF_GDIOBJLAST. Ao usar valores nesse intervalo, o identificador de dados não é um identificador para um objeto GDI (Windows Graphics Device Interface), mas é um identificador alocado pelo função GlobalAlloc com o sinalizador GMEM_MOVEABLE. Quando a área de transferência é esvaziada, o sistema exclui automaticamente o objeto usando a função GlobalFree.

Vários formatos de área de transferência

Uma janela pode colocar mais de um objeto da área de transferência na área de transferência, cada um representando as mesmas informações em um formato de área de transferência diferente. Ao colocar informações na área de transferência, a janela deve fornecer dados no maior número possível de formatos. Para saber quantos formatos são usados atualmente na área de transferência, chame a funçãoCountClipboardFormats.

Os formatos da área de transferência que contêm mais informações devem ser colocados na área de transferência primeiro, seguidos por formatos menos descritivos. Uma janela colando informações da área de transferência normalmente recupera um objeto da área de transferência no primeiro formato que ele reconhece. Como os formatos da área de transferência são enumerados na ordem em que são colocados na área de transferência, o primeiro formato reconhecido também é o mais descritivo.

Por exemplo, suponha que um usuário copie texto com estilo de um documento de processamento de texto. A janela que contém o documento pode primeiro colocar dados na área de transferência em um formato registrado, como RTF. Posteriormente, a janela colocaria os dados na área de transferência em um formato menos descritivo, como texto (CF_TEXT).

Quando o conteúdo da área de transferência é colado em outra janela, a janela recupera dados no formato mais descritivo que reconhece. Se a janela reconhecer RTF, os dados correspondentes serão colados no documento. Caso contrário, os dados de texto são colados no documento e as informações de formatação são perdidas.

Formatos sintetizados da área de transferência

O sistema converte implicitamente dados entre determinados formatos da área de transferência: se uma janela solicita dados em um formato que não está na área de transferência, o sistema converte um formato disponível para o formato solicitado. O sistema pode converter dados conforme indicado na tabela a seguir.

Formato da área de transferência Formato de Conversão
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

 

Se o sistema fornecer uma conversão automática de tipo para um determinado formato de área de transferência, não há vantagem em colocar o(s) formato(s) de conversão na área de transferência.

Se o sistema fornecer uma conversão automática de tipo para um formato específico da área de transferência e você chamar EnumClipboardFormats para enumerar os formatos de dados da área de transferência, o sistema primeiro enumerará o formato que está na área de transferência, seguido pelos formatos para os quais ele pode ser convertido.

Ao copiar bitmaps, é melhor colocar o formato CF_DIB ou CF_DIBV5 na área de transferência. Isso ocorre porque as cores em um bitmap dependente do dispositivo (CF_BITMAP) são relativas à paleta do sistema, que pode mudar antes que o bitmap seja colado. Se o formato CF_DIB ou CF_DIBV5 estiver na área de transferência e uma janela solicitar o formato CF_BITMAP, o sistema renderizará o bitmap independente do dispositivo (DIB) usando a paleta atual naquele momento.

Se você colocar o formato CF_BITMAP na área de transferência (e não CF_DIB), o sistema renderizará o formato CF_DIB ou CF_DIBV5 área de transferência assim que a área de transferência for fechada. Isso garante que a paleta correta seja usada para gerar o DIB. Se você colocar o formato CF_DIBV5 com as informações de espaço de cores de bitmap na área de transferência, o sistema converterá os bits de bitmap do espaço de cores de bitmap para o espaço de cores sRGB quando CF_DIB ou CF_DIBV5 for solicitado. Se CF_DIBV5 for solicitado quando não houver informações de espaço de cor na área de transferência, o sistema retornará informações de espaço de cores sRGB na estrutura BITMAPV5HEADER. As conversões entre outros formatos da área de transferência ocorrem sob demanda.

Se a área de transferência contiver dados no formato CF_PALETTE, o aplicativo deverá usar o SelectPalette e funções de RealizePalette para realizar quaisquer outros dados na área de transferência em relação a essa paleta lógica.

Existem dois formatos de área de transferência para metaficheiros: CF_ENHMETAFILE e CF_METAFILEPICT. Especifique CF_ENHMETAFILE para metadados avançados e CF_METAFILEPICT para metaarquivos do Windows.

Formatos de histórico da área de transferência na nuvem e da área de transferência

Algumas versões do Windows incluem Cloud Clipboard, que mantém um histórico de itens de dados recentes da área de transferência e pode sincronizá-lo entre os dispositivos do usuário. Se você não quiser que os dados que seu aplicativo coloca na área de transferência sejam incluídos no histórico da área de transferência ou sincronizados com outros dispositivos, seu aplicativo pode controlar esse comportamento colocando dados em determinados formatos de área de transferência registrados cujos nomes são conhecidos pelo sistema Windows:

  • ExcludeClipboardContentFromMonitorProcessing : Coloque todos os dados na área de transferência neste formato para impedir que todos os formatos da área de transferência sejam incluídos no histórico da área de transferência ou sincronizados com os outros dispositivos do usuário.
  • CanIncludeInClipboardHistory : Coloque um valor deDWORD deserializado de zero na área de transferência nesse formato para impedir que todos os formatos da área de transferência sejam incluídos no histórico da área de transferência ou coloque um valor de um para solicitar explicitamente que o item da área de transferência seja incluído no histórico da área de transferência. Isso não afeta a sincronização com outros dispositivos do usuário.
  • CanUploadToCloudClipboard : Coloque um valor deDWORDserializado zero na área de transferência nesse formato para impedir que todos os formatos da área de transferência sejam sincronizados com os outros dispositivos do usuário ou coloque um valor de um para solicitar explicitamente que o item da área de transferência seja sincronizado com outros dispositivos. Isso não afeta o histórico da área de transferência do dispositivo local.

Tal como acontece com outros formatos de área de transferência registados, terá de utilizar a funçãoRegisterClipboardFormat para obter um valor inteiro não assinado que identifique cada um dos 3 formatos acima.