Bien, techniquement:
Le cliboard Win32 est horriblement complexe pour rien.
Tiré de la MSDN Octobre 2000 ( déjà snif, il se fait vieux):
Chaque paquet de données présente dans le clipboard(presse-papier) a son propre type.
Windows fourni déjà une panoplie de types prés-enregistrés, comme du texte ascii, unicode, des bitmaps, ect...
Si tu veux mettre dans le presse papier des types plus complexes qui viennent de toi, tu dois les pré-enregistrer avant et la démarche devient plus complexe.
Pour mettre des données dans le presse papier, ´faut encore passer par ces Handles lourdingues:
Tes données doivent être pointées par un Handle. Après, tu dois ouvrir le clipboard avec OpenClipboard, le vider si tu le veux avec EmptyClipboard, y mettre tes données puis le fermer avec CloseClipboard.
Pour y mettre tes données, c´est SetClipboardData(). Le deuxième paramètre est le handle vers tes données, mais le vrai truc important est le premier paramètre.
C´est en effet la classe de tes données, un chiffre le spécifiant.
Pour en obtenir un, tu dois registerer ton type avec RegisterClipboardFormat, avec comme paramètre une string étant le nom que tu donne à ce format, comme " MonFormat".
Il va te retourner cet handle.
Pour prendre des données, tu te trouve un buffer pointé par un handle, tu ouvre le buffer, tu prend tes données avec GetClipboardData et tu le ferme.
en fait GetClipboardData prend comme paramètre ce fameux chiffre identificateur de ton format. Si tu la inventé, faut que l´autre programme qui veut l´utiliser ait aussi le même identifiant. Hors, ils sont pris dynamiquement, c´est jamais un nombre fixe. Cepandant, le truc est d´utiliser la string qui identifiait ton format.
Pour cela, tu dois faire un appel à RegisterClipboardFormat avec encore le nom de la string. Mais hors, étant déjà identifié, il va se passer ce qui est spécifié ici:
"
If a registered format with the specified name already exists, a new format is not registered and the return value identifies the existing format. This enables more than one application to copy and paste data using the same registered clipboard format. Note that the format name comparison is case-insensitive.
"
Traduit en:
"
Si un format enregistré avec le nom spécifié(à comprendre, le paramètre) existe déjà, un nouveau format n´est pas engeristré et la valeur de retour identifie le format existant(donc le même que celui au premier appel). Cela permet à plus d´une application de copier-coller en utilisant le même format enregistré. Notez que la comparaison entre noms de formats ne prend pas en compte la casse.
"
Plus encore, il existe des moyens d´ " associer" une fenêtre à un clipboard. On appèle ça un Clipboard viewer, et ça fait que la fenêtre reçoit des messages au sens WM_MESSAGEQUELCONQUE
lui indiquant des infos sur le clipboard quand un autre programme y touche.
Je vois mal son utilité, mais bon, si ça intéresse quelqu´un, c´est à voir sur la MSDN.
Ah oui, à noter:
IsClipboardFormatAvailable(), contrairement à ce que son nom présume ( il présume pas grand chose en fait), vérifie, avec comme paramètre un ID de format, si ce format est présent dans le clipboard.
N.B. Voici quelques formats utilisables pré-enregistrés:
CF_BITMAP
CF_TEXT
CF_WAVE
CF_TIFF
CF_UNICODETEXT
ect.
Kelios
---------