Pour les fana de l'API Win32

Partagez votre expérience de PureBasic avec les autres utilisateurs.
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Pour les fana de l'API Win32

Message par cederavic »

Voilas 3 petites fonctions qui permete de récuperer les valeur "LoWord" et "HiWord" pour LParam et WParam (lors de l'utilisation de SendMessage_() par exemple) et une derniere pour qui fait l'inverse :

Code : Tout sélectionner

Procedure MakeParam(LoWord, HiWord)
  param & $ffff + LoWord
  param + HiWord << 16
  ProcedureReturn param
EndProcedure

Procedure GetLoWord(param)

  ProcedureReturn param & $ffff
  
EndProcedure

Procedure GetHiWord(param)

  ProcedureReturn param >> 16
  
EndProcedure
bernard13
Messages : 1221
Inscription : mer. 05/janv./2005 21:30

Message par bernard13 »

merci bien mais je comprend pas
Torp
Messages : 360
Inscription : lun. 22/nov./2004 13:05

Message par Torp »

bernard13 a écrit :merci bien mais je comprend pas
Parler pour rien dire... Bernard c'est pas possible, tu prends des cours du soir!
nico
Messages : 3702
Inscription : ven. 13/févr./2004 0:57

Message par nico »

@bernard13,

Un mot de 32 bits peut servir à renvoyer plusieurs valeurs, par exemple deux valeurs de 16 bits. Donc pour cela on va décomposer le mot de 32 bits avec les 16 bits de valeurs hautes (hi-word) et les 16 bits de valeurs basses (lo-word), on a au final 2 mots de 16 bits qui donne 2 words.

Pour récupérer les 16 bits de poids fort (hi-word) on va effectuer une rotation des bits, en fait un décalage sur 16 bits. au final les 16 bits de poids fort se retrouvent être les 16 bits de poids faible maintenant et des zéros ont remplacés les bits de poids fort.

Pour récupérer les 16 bits de poids faible (lo-word) on va effectuer un ET logique avec un masque car ici on veut supprimer la lecture des 16 premier bits. Le masque sera de cette valeur (en binaire):
00000000000000001111111111111111
ce qui donne en hexa:
$ffff
Les 16 premiers bits additionnés auront la valeur 0 tandis que les valeurs suivantes conserveront leurs données.
Pingtix
Messages : 159
Inscription : mer. 03/nov./2004 15:30

Message par Pingtix »

8O
Euh...
Avatar de l’utilisateur
cederavic
Messages : 1338
Inscription : lun. 09/févr./2004 23:38
Localisation : Bordeaux

Message par cederavic »

En claire, une valeur 32 Bit peut contenir 2 valeur 16 bit (la premiere sur les 16 premiers bits et la 2eme sur les 16 derniers). Mes 3 procédures permettent de recuperer la "premiere" et "deuxieme" valeur et de faire l'inverse (mettre une premiere valeur sur les 16 premier bits et une deuxieme sur les 16 derniers). En gros, c'est comme si la valeur 32 bit etait une boite avec 2 compartiments...
Répondre