Formats du Presse-papiers
Une fenêtre peut placer plusieurs objets dans le Presse-papiers, chacune représentant les mêmes informations dans un format de Presse-papiers différent. 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 de Presse-papiers standard
- formats de Presse-papiers inscrits
- formats de Presse-papiers privés
- plusieurs formats de Presse-papiers
- formats de Presse-papiers synthétisés
- formats d’historique du Presse-papiers et du Presse-papiers cloud
Formats standard du Presse-papiers
Les formats du Presse-papiers définis par le système sont appelés formats de Presse-papiers standard. Ces formats de Presse-papiers sont décrits dans Formats de Presse-papiers standard.
Formats de Presse-papiers inscrits
De nombreuses applications fonctionnent avec des données qui ne peuvent pas être traduites en format presse-papiers standard 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 copiée du texte 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 inscrivent un format presse-papiers avec exactement le même nom, le format du Presse-papiers n’est enregistré 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 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 (Graphics Device Interface), mais il 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 du Presse-papiers multiples
Une fenêtre peut placer plusieurs objets presse-papiers dans le Presse-papiers, chacune représentant les mêmes informations dans un format de Presse-papiers différent. 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 du Presse-papiers qui contiennent la plupart des informations doivent être placés dans le Presse-papiers en premier, suivis de formats moins descriptifs. Une fenêtre collant des informations à partir du Presse-papiers récupère généralement un objet Presse-papiers au 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, tel que 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 de Presse-papiers synthétisés
Le système convertit implicitement les données entre certains formats de Presse-papiers : si une fenêtre demande des données dans un format qui n’est 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 du 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 automatique de type pour un format de Presse-papiers particulier, il n’est pas avantageux de placer le ou les formats de conversion dans le Presse-papiers.
Si le système fournit une conversion automatique de type pour un format de Presse-papiers particulier 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 dans lesquels il peut être converti.
Lorsque vous copiez des 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, ce 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 restitue la bitmap indépendante de l’appareil (DIB) à l’aide de la palette actuelle à ce moment-là.
Si vous placez le format CF_BITMAP dans le Presse-papiers (et non CF_DIB), le système restitue 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 de couleur bitmap 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 sRVB dans la structure BITMAPV5HEADER. Les conversions entre d’autres formats de Presse-papiers se produisent à la demande.
Si le Presse-papiers contient des données au format CF_PALETTE, l’application doit utiliser leSelectPaletteet fonctions RealizePalette pour réaliser d’autres données dans le Presse-papiers sur 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 Presse-papiers cloud, qui conserve un historique des éléments de données du Presse-papiers récents 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 des données dans certains formats de Presse-papiers inscrits dont les noms sont connus du système Windows :
- ExcludeClipboardContentFromMonitorProcessing : placez toutes les données du Presse-papiers dans ce format pour empêcher tous les formats du Presse-papiers d’être inclus dans l’historique du Presse-papiers ou synchronisés avec les autres appareils de l’utilisateur.
- CanIncludeInClipboardHistory : placez une valeur d'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 plutôt une valeur d’une valeur pour demander explicitement que l’élément 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 d'DWORD sérialisée de zéro dans le Presse-papiers dans ce format pour empêcher la synchronisation de tous les formats de Presse-papiers sur les autres appareils de l’utilisateur, ou placez une valeur d’une valeur d’une au lieu de demander explicitement que l’élément presse-papiers soit synchronisé avec d’autres appareils. Cela n’affecte pas l’historique du Presse-papiers de l’appareil local.
Comme avec d’autres formats de 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.