Compartir a través de


Formatos del Portapapeles

Una ventana puede colocar más de un objeto en el Portapapeles, cada uno de los cuales representa la misma información en un formato de Portapapeles diferente. Los usuarios no deben tener en cuenta los formatos del Portapapeles usados para un objeto en el Portapapeles.

En los temas siguientes se describen los formatos del Portapapeles.

Formatos estándar del Portapapeles

Los formatos del Portapapeles definidos por el sistema se denominan formatos de Portapapeles estándar. Estos formatos de Portapapeles se describen en Formatos estándar del Portapapeles.

Formatos de Portapapeles registrados

Muchas aplicaciones funcionan con datos que no se pueden traducir a un formato estándar del Portapapeles sin pérdida de información. Estas aplicaciones pueden crear sus propios formatos de Portapapeles. Un formato de Portapapeles definido por una aplicación se denomina formato de Portapapeles registrado. Por ejemplo, si una aplicación de procesamiento de texto copió texto con formato en el Portapapeles mediante un formato de texto estándar, se perdería la información de formato. La solución sería registrar un nuevo formato de Portapapeles, como formato de texto enriquecido (RTF).

Para registrar un nuevo formato de Portapapeles, use la función RegisterClipboardFormat . Esta función toma el nombre del formato y devuelve un valor entero sin signo que representa el formato del Portapapeles registrado. Para recuperar el nombre del formato del Portapapeles registrado, pase el valor entero sin signo a la función GetClipboardFormatName .

Si más de una aplicación registra un formato de Portapapeles con exactamente el mismo nombre, el formato del Portapapeles solo se registra una vez. Ambas llamadas a la función RegisterClipboardFormat devuelven el mismo valor. De esta manera, dos aplicaciones diferentes pueden compartir datos mediante un formato de Portapapeles registrado.

Formatos de Portapapeles privados

Una aplicación puede identificar un formato de Portapapeles privado definiendo un valor en el intervalo CF_PRIVATEFIRST a través de CF_PRIVATELAST. Una aplicación puede usar un formato de Portapapeles privado para un formato de datos definido por la aplicación que no es necesario registrar con el sistema.

El sistema no libera automáticamente los identificadores de datos asociados con formatos privados del Portapapeles. Si las ventanas usan formatos de Portapapeles privados, puede usar el mensaje WM_DESTROYCLIPBOARD para liberar los recursos relacionados que ya no sean necesarios.

Para obtener más información sobre el mensaje de WM_DESTROYCLIPBOARD , vea Propiedad del Portapapeles.

Una aplicación puede colocar identificadores de datos en el Portapapeles mediante la definición de un formato privado en el intervalo CF_GDIOBJFIRST a través de CF_GDIOBJLAST. Cuando se usan valores en este intervalo, el identificador de datos no es un identificador de un objeto de interfaz de dispositivo gráfico (GDI) de Windows, pero es un identificador asignado por la función GlobalAlloc con la marca GMEM_MOVEABLE. Cuando se vacía el Portapapeles, el sistema elimina automáticamente el objeto mediante la función GlobalFree .

Varios formatos de Portapapeles

Una ventana puede colocar más de un objeto de Portapapeles en el Portapapeles, cada uno que representa la misma información en un formato de Portapapeles diferente. Al colocar información en el Portapapeles, la ventana debe proporcionar datos en tantos formatos como sea posible. Para averiguar cuántos formatos se usan actualmente en el Portapapeles, llame a la función CountClipboardFormats .

Los formatos del Portapapeles que contienen la mayoría de la información deben colocarse primero en el Portapapeles, seguidos de formatos menos descriptivos. Una ventana pegando información del Portapapeles normalmente recupera un objeto de Portapapeles en el primer formato que reconoce. Dado que los formatos del Portapapeles se enumeran en el orden en que se colocan en el Portapapeles, el primer formato reconocido también es el más descriptivo.

Por ejemplo, supongamos que un usuario copia texto con estilo de un documento de procesamiento de texto. La ventana que contiene el documento podría colocar primero los datos en el Portapapeles en un formato registrado, como RTF. Posteriormente, la ventana colocaría datos en el Portapapeles en un formato menos descriptivo, como texto (CF_TEXT).

Cuando el contenido del Portapapeles se pega en otra ventana, la ventana recupera los datos en el formato más descriptivo que reconoce. Si la ventana reconoce RTF, los datos correspondientes se pegan en el documento. De lo contrario, los datos de texto se pegan en el documento y se pierde la información de formato.

Formatos de Portapapeles sintetizados

El sistema convierte implícitamente los datos entre determinados formatos del Portapapeles: si una ventana solicita datos en un formato que no está en el Portapapeles, el sistema convierte un formato disponible al formato solicitado. El sistema puede convertir datos como se indica en la tabla siguiente.

Formato de Portapapeles Formato de conversión
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

 

Si el sistema proporciona una conversión automática de tipos para un formato de Portapapeles determinado, no hay ninguna ventaja de colocar los formatos de conversión en el Portapapeles.

Si el sistema proporciona una conversión automática de tipos para un formato de Portapapeles determinado y llama a EnumClipboardFormats para enumerar los formatos de datos del Portapapeles, el sistema enumera primero el formato que se encuentra en el Portapapeles, seguido de los formatos a los que se puede convertir.

Al copiar mapas de bits, es mejor colocar el formato CF_DIB o CF_DIBV5 en el Portapapeles. Esto se debe a que los colores de un mapa de bits dependiente del dispositivo (CF_BITMAP) son relativos a la paleta del sistema, lo que puede cambiar antes de pegar el mapa de bits. Si el formato CF_DIB o CF_DIBV5 está en el Portapapeles y una ventana solicita el formato CF_BITMAP , el sistema representa el mapa de bits independiente del dispositivo (DIB) mediante la paleta actual en ese momento.

Si coloca el formato CF_BITMAP en el Portapapeles (y no CF_DIB), el sistema representa el CF_DIB o CF_DIBV5 formato del Portapapeles en cuanto se cierra el Portapapeles. Esto garantiza que la paleta correcta se use para generar la DIB. Si coloca el formato de CF_DIBV5 con la información del espacio de colores del mapa de bits en el Portapapeles, el sistema convertirá los bits de mapa de bits del espacio de colores del mapa de bits al espacio de colores sRGB cuando se solicite CF_DIB o CF_DIBV5 . Si CF_DIBV5 se solicita cuando no hay información de espacio de color en el Portapapeles, el sistema devuelve información de espacio de color sRGB en la estructura BITMAPV5HEADER . Las conversiones entre otros formatos del Portapapeles se producen a petición.

Si el Portapapeles contiene datos en el formato CF_PALETTE , la aplicación debe usar las funciones SelectPalette y RealizePalette para realizar cualquier otro dato del Portapapeles en esa paleta lógica.

Hay dos formatos de Portapapeles para metarchivos: CF_ENHMETAFILE y CF_METAFILEPICT. Especifique CF_ENHMETAFILE para metarchivos mejorados y CF_METAFILEPICT para metarchivos de Windows.

Formatos de historial de Portapapeles y Portapapeles en la nube

Algunas versiones de Windows incluyen El Portapapeles en la nube, que mantiene un historial de los elementos de datos recientes del Portapapeles y puede sincronizarlo entre los dispositivos del usuario. Si no desea que los datos que coloque la aplicación en el Portapapeles se incluyan en el historial del Portapapeles o se sincronicen con otros dispositivos, la aplicación puede controlar este comportamiento colocando datos en determinados formatos de Portapapeles registrados cuyos nombres se conocen en el sistema Windows:

  • ExcludeClipboardContentFromMonitorProcessing : coloque los datos en el Portapapeles en este formato para evitar que todos los formatos del Portapapeles se incluyan en el historial del Portapapeles o se sincronicen con los demás dispositivos del usuario.
  • CanIncludeInClipboardHistory : coloque un valor DWORD serializado de cero en el Portapapeles en este formato para evitar que todos los formatos del Portapapeles se incluyan en el historial del Portapapeles o coloque un valor de uno en lugar de solicitar explícitamente que el elemento del Portapapeles se incluya en el historial del Portapapeles. Esto no afecta a la sincronización con los demás dispositivos del usuario.
  • CanUploadToCloudClipboard : coloque un valor DWORD serializado de cero en el Portapapeles en este formato para evitar que todos los formatos del Portapapeles se sincronicen con los demás dispositivos del usuario o coloquen un valor de uno en lugar de solicitar explícitamente que el elemento del Portapapeles se sincronice con otros dispositivos. Esto no afecta al historial del Portapapeles del dispositivo local.

Al igual que con otros formatos de Portapapeles registrados, deberá usar la función RegisterClipboardFormat para obtener un valor entero sin signo que identifique cada uno de los tres formatos anteriores.