Compartilhar via


Formatos de á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 de área de transferência diferente. Os usuários não precisam estar cientes dos formatos de á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 de área de transferência padrão

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

Formatos de área de transferência registrados

Muitos aplicativos trabalham com dados que não podem ser convertidos 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 palavras copiasse o 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 RTF (Rich Text Format).

Para registrar um novo formato de área de transferência, use a função RegisterClipboardFormat. Essa função usa o nome do formato e retorna um valor inteiro sem sinal que representa o formato de área de transferência registrado. Para recuperar o nome do formato de área de transferência registrado, passe o valor inteiro sem sinal para a função GetClipboardFormatName.

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ção RegisterClipboardFormat retornam o mesmo valor. Dessa 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 até 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 com o sistema.

Os identificadores de dados associados aos formatos de área de transferência privada não são liberados automaticamente pelo sistema. Se suas janelas usarem formatos de área de transferência privada, você poderá usar a mensagem WM_DESTROYCLIPBOARD para liberar os recursos relacionados que não são mais necessários.

Para obter mais informações sobre a mensagem de 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 (Interface do Dispositivo Gráfico do Windows), mas é um identificador alocado pela funçãoGlobalAlloccom o sinalizador GMEM_MOVEABLE. Quando a área de transferência é esvaziada, o sistema exclui automaticamente o objeto usando a funçãoGlobalFree.

Vários formatos de área de transferência

Uma janela pode colocar mais de um objeto de área de transferência na área de transferência, cada uma 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 máximo de formatos possível. Para descobrir quantos formatos são usados atualmente na área de transferência, chame a função CountClipboardFormats.

Os formatos de á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 que cola informações da área de transferência normalmente recupera um objeto de área de transferência no primeiro formato que reconhece. Como os formatos de á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 o texto com estilo de um documento de processamento de palavras. 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 serão colados no documento e as informações de formatação serão perdidas.

Formatos de área de transferência sintetizados

O sistema converte implicitamente dados entre determinados formatos de área de transferência: se uma janela solicitar dados em um formato que não esteja na área de transferência, o sistema converterá um formato disponível no 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 formato de área de transferência específico, não haverá nenhuma vantagem em colocar os formatos de conversão na área de transferência.

Se o sistema fornecer uma conversão automática de tipo para um formato de área de transferência específico 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 ser alterada 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 DIB (bitmap independente do dispositivo) usando a paleta atual no momento.

Se você colocar o formato CF_BITMAP na área de transferência (e não CF_DIB), o sistema renderizará o formato da área de transferência CF_DIB ou CF_DIBV5 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 cor do bitmap na área de transferência, o sistema converterá os bits de bitmap do espaço de cor do bitmap para o espaço de cor sRGB quando CF_DIB ou CF_DIBV5 for solicitado. Se CF_DIBV5 for solicitado quando não houver informações de espaço em cores na área de transferência, o sistema retornará informações de espaço de cor sRGB na estrutura BITMAPV5HEADER. As conversões entre outros formatos de área de transferência ocorrem sob demanda.

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

Há dois formatos de área de transferência para metafiles: CF_ENHMETAFILE e CF_METAFILEPICT. Especifique CF_ENHMETAFILE para metafilos aprimorados e CF_METAFILEPICT para metafilos do Windows.

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

Algumas versões do Windows incluem de Área de Transferência de Nuvem, que mantém um histórico de itens de dados de área de transferência recentes 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 poderá controlar esse comportamento colocando dados em determinadas 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 nesse formato para evitar que todos os formatos de área de transferência sejam incluídos no histórico da área de transferência ou sincronizados com outros dispositivos do usuário.
  • CanIncludeInClipboardHistory: coloque um DWORD serializado valor zero na área de transferência neste formato para impedir que todos os formatos de área de transferência sejam incluídos no histórico da área de transferência ou coloque um valor de um em vez disso 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 DWORD serializado valor zero na área de transferência neste formato para evitar que todos os formatos de área de transferência sejam sincronizados com 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.

Assim como acontece com outros formatos de área de transferência registrados, você precisará usar a função RegisterClipboardFormat para obter um valor inteiro sem sinal que identifique cada um dos três formatos acima.