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
- Formatos de área de transferência registrados
- Formatos privados da área de transferência
- Vários formatos da área de transferência
- Formatos sintetizados da área de transferência
- Formatos de histórico da área de transferência e da área de transferência na nuvem
Formatos padrão da área de transferência
Os formatos da área de transferência definidos pelo sistema são chamados de formatos padrão da área de transferência. Esses formatos da á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 traduzidos para 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 que é 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 o Rich Text Format (RTF).
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 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çã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 privados da área de transferência
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 no sistema.
Os identificadores de dados associados a formatos privados da área de transferência não são liberados automaticamente pelo sistema. Se suas janelas usarem formatos privados da área de transferência, você poderá usar a mensagem WM_DESTROYCLIPBOARD para liberar quaisquer recursos relacionados que não sejam mais necessários.
Para obter mais informações sobre a mensagem WM_DESTROYCLIPBOARD, consulte 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 a 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 pela 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 da á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 diferente da área de transferência. Ao colocar informações na área de transferência, a janela deve fornecer dados no maior número possível de formatos. Para descobrir quantos formatos são usados atualmente na área de transferência, chame a função CountClipboardFormats.
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 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 o texto estilizado 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 serão colados no documento e as informações de formatação serã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 formato específico da á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 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 bitmap independente de 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 da á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 cores 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 as funções SelectPalette e RealizePalette para realizar quaisquer outros dados na área de transferência em relação a essa paleta lógica.
Há dois formatos de área de transferência para metaarquivos: CF_ENHMETAFILE e CF_METAFILEPICT. Especifique CF_ENHMETAFILE para metarquivos avançados e CF_METAFILEPICT para metarquivos do Windows.
Formatos de histórico da área de transferência e da área de transferência na nuvem
Algumas versões do Windows incluem o 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 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 sincronizados com os outros dispositivos do usuário.
- CanIncludeInClipboardHistory : Coloque um valor DWORD serializado 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 DWORD serializado de 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 em vez disso 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.
Como acontece com outros formatos de área de transferência registrados, você precisará usar a função RegisterClipboardFormat para obter um valor inteiro não assinado que identifique cada um dos 3 formatos acima.