Formats du Presse-papiers

Une fenêtre peut placer plusieurs objets dans le Presse-papiers, chacun représentant les mêmes informations dans un format différent du Presse-papiers. Les utilisateurs n’ont pas besoin de connaître les formats du Presse-papiers utilisés pour un objet dans le Presse-papiers.

Les rubriques suivantes décrivent les formats du Presse-papiers.

Formats standard du Presse-papiers

Les formats de Presse-papiers définis par le système sont appelés formats standard du Presse-papiers. Ces formats de Presse-papiers sont décrits dans Formats standard du Presse-papiers.

Formats du Presse-papiers inscrits

De nombreuses applications fonctionnent avec des données qui ne peuvent pas être traduites dans un format standard du Presse-papiers sans perte d’informations. Ces applications peuvent créer leurs propres formats de Presse-papiers. Un format de Presse-papiers défini par une application est appelé format de Presse-papiers inscrit. Par exemple, si une application de traitement de texte copie du texte mis en forme dans le Presse-papiers à l’aide d’un format de texte standard, les informations de mise en forme sont perdues. La solution consiste à inscrire un nouveau format de Presse-papiers, tel que RTF (Rich Text Format).

Pour inscrire un nouveau format de Presse-papiers, utilisez la fonction RegisterClipboardFormat . Cette fonction prend le nom du format et retourne une valeur entière non signée qui représente le format du Presse-papiers inscrit. Pour récupérer le nom du format du Presse-papiers inscrit, transmettez la valeur entière non signée à la fonction GetClipboardFormatName .

Si plusieurs applications enregistrent un format de Presse-papiers portant exactement le même nom, le format du Presse-papiers n’est inscrit qu’une seule fois. Les deux appels à la fonction RegisterClipboardFormat retournent la même valeur. De cette façon, deux applications différentes peuvent partager des données à l’aide d’un format de Presse-papiers inscrit.

Formats du Presse-papiers privé

Une application peut identifier un format de Presse-papiers privé en définissant une valeur dans la plage CF_PRIVATEFIRST via CF_PRIVATELAST. Une application peut utiliser un format de Presse-papiers privé pour un format de données défini par l’application qui n’a pas besoin d’être inscrit auprès du système.

Les handles de données associés aux formats de Presse-papiers privés ne sont pas automatiquement libérés par le système. Si vos fenêtres utilisent des formats de Presse-papiers privés, vous pouvez utiliser le message WM_DESTROYCLIPBOARD pour libérer toutes les ressources associées qui ne sont plus nécessaires.

Pour plus d’informations sur le message WM_DESTROYCLIPBOARD , consultez Propriété du Presse-papiers.

Une application peut placer des handles de données dans le Presse-papiers en définissant un format privé dans la plage CF_GDIOBJFIRST via CF_GDIOBJLAST. Lorsque vous utilisez des valeurs dans cette plage, le handle de données n’est pas un handle pour un objet GDI (Windows Graphics Device Interface), mais est un handle alloué par la fonction GlobalAlloc avec l’indicateur GMEM_MOVEABLE. Lorsque le Presse-papiers est vidé, le système supprime automatiquement l’objet à l’aide de la fonction GlobalFree .

Formats multiples du Presse-papiers

Une fenêtre peut placer plusieurs objets de Presse-papiers dans le Presse-papiers, chacun représentant les mêmes informations dans un format différent du Presse-papiers. Lorsque vous placez des informations dans le Presse-papiers, la fenêtre doit fournir des données dans autant de formats que possible. Pour savoir combien de formats sont actuellement utilisés dans le Presse-papiers, appelez la fonction CountClipboardFormats .

Les formats de Presse-papiers qui contiennent le plus d’informations doivent d’abord être placés dans le Presse-papiers, suivis de formats moins descriptifs. Un collage d’informations de fenêtre à partir du Presse-papiers récupère généralement un objet presse-papiers dans le premier format qu’il reconnaît. Étant donné que les formats du Presse-papiers sont énumérés dans l’ordre dans lequel ils sont placés dans le Presse-papiers, le premier format reconnu est également le plus descriptif.

Par exemple, supposons qu’un utilisateur copie du texte de style à partir d’un document de traitement de texte. La fenêtre contenant le document peut d’abord placer des données dans le Presse-papiers dans un format inscrit, tel que RTF. Par la suite, la fenêtre place les données dans le Presse-papiers dans un format moins descriptif, comme du texte (CF_TEXT).

Lorsque le contenu du Presse-papiers est collé dans une autre fenêtre, la fenêtre récupère les données dans le format le plus descriptif qu’elle reconnaît. Si la fenêtre reconnaît RTF, les données correspondantes sont collées dans le document. Sinon, les données de texte sont collées dans le document et les informations de mise en forme sont perdues.

Formats synthétisés du Presse-papiers

Le système convertit implicitement les données entre certains formats du Presse-papiers : si une fenêtre demande des données dans un format qui ne figure pas dans le Presse-papiers, le système convertit un format disponible au format demandé. Le système peut convertir des données comme indiqué dans le tableau suivant.

Format de Presse-papiers Conversion Format
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 le système fournit une conversion de type automatique pour un format particulier du Presse-papiers, il n’est pas avantageux de placer le ou les formats de conversion dans le Presse-papiers.

Si le système fournit une conversion de type automatique pour un format particulier du Presse-papiers et que vous appelez EnumClipboardFormats pour énumérer les formats de données du Presse-papiers, le système énumère d’abord le format qui se trouve dans le Presse-papiers, suivi des formats vers lesquels il peut être converti.

Lors de la copie de bitmaps, il est préférable de placer le format CF_DIB ou CF_DIBV5 dans le Presse-papiers. Cela est dû au fait que les couleurs d’une bitmap dépendante de l’appareil (CF_BITMAP) sont relatives à la palette système, qui peut changer avant que la bitmap ne soit collée. Si le format CF_DIB ou CF_DIBV5 se trouve dans le Presse-papiers et qu’une fenêtre demande le format CF_BITMAP , le système affiche la bitmap indépendante du périphérique (DIB) à l’aide de la palette active à ce moment-là.

Si vous placez le format CF_BITMAP dans le Presse-papiers (et non CF_DIB), le système affiche le format CF_DIB ou CF_DIBV5 presse-papiers dès que le Presse-papiers est fermé. Cela garantit que la palette correcte est utilisée pour générer la DIB. Si vous placez le format CF_DIBV5 avec les informations d’espace de couleur bitmap dans le Presse-papiers, le système convertit les bits bitmap de l’espace colorimétrique en espace de couleur sRGB lorsque CF_DIB ou CF_DIBV5 est demandé. Si CF_DIBV5 est demandé lorsqu’il n’y a pas d’informations d’espace de couleur dans le Presse-papiers, le système retourne des informations d’espace de couleur sRGB dans la structure BITMAPV5HEADER . Les conversions entre d’autres formats du Presse-papiers se produisent à la demande.

Si le Presse-papiers contient des données au format CF_PALETTE , l’application doit utiliser les fonctions SelectPalette et RealizePalette pour réaliser toutes les autres données du Presse-papiers par rapport à cette palette logique.

Il existe deux formats de presse-papiers pour les métafichiers : CF_ENHMETAFILE et CF_METAFILEPICT. Spécifiez CF_ENHMETAFILE pour les métafichiers améliorés et les CF_METAFILEPICT pour les métafichiers Windows.

Formats d’historique du Presse-papiers et du Presse-papiers cloud

Certaines versions de Windows incluent le Presse-papiers cloud, qui conserve un historique des éléments de données récents du Presse-papiers et peut le synchroniser entre les appareils de l’utilisateur. Si vous ne souhaitez pas que les données que votre application place dans le Presse-papiers soient incluses dans l’historique du Presse-papiers ou synchronisées avec d’autres appareils, votre application peut contrôler ce comportement en plaçant les données dans certains formats de Presse-papiers inscrits dont les noms sont connus du système Windows :

  • ExcludeClipboardContentFromMonitorProcessing : placez les données dans le Presse-papiers dans ce format pour empêcher que tous les formats du Presse-papiers soient inclus dans l’historique du Presse-papiers ou synchronisés avec les autres appareils de l’utilisateur.
  • CanIncludeInClipboardHistory : placez une valeur DWORD sérialisée de zéro dans le Presse-papiers dans ce format pour empêcher l’inclusion de tous les formats du Presse-papiers dans l’historique du Presse-papiers, ou placez une valeur d’une valeur à la place pour demander explicitement que l’élément du Presse-papiers soit inclus dans l’historique du Presse-papiers. Cela n’affecte pas la synchronisation avec les autres appareils de l’utilisateur.
  • CanUploadToCloudClipboard : placez une valeur DWORD sérialisée de zéro dans le Presse-papiers dans ce format pour empêcher la synchronisation de tous les formats du Presse-papiers avec les autres appareils de l’utilisateur, ou placez une valeur d’un pour demander explicitement que l’élément du Presse-papiers soit synchronisé avec d’autres appareils. Cela n’affecte pas l’historique du Presse-papiers de l’appareil local.

Comme pour les autres formats du Presse-papiers inscrits, vous devez utiliser la fonction RegisterClipboardFormat pour obtenir une valeur entière non signée qui identifie chacun des 3 formats ci-dessus.