WPARAM et LPARAM paramètres
Lors du passage d'une valeur à une fonction qui prend à la fois une WPARAM et LPARAM paramètre, n'importe lequel d'entre eux-je passer? Quelqu'un m'a dit que si j'utilise Windows x64, je devrais utiliser WPARAM; est-ce vrai?
Parlez-vous une API de Windows ou une fonction que vous écrivez? Si c'est quelque chose que vous avez écrit, décrire ce que les arguments sont - il ya une bonne chance que
C'est quelque chose que je suis en train d'écrire un message défini par l'utilisateur, je n'ai pas encore utiliser deux paramètres, mais j'ai vu dans un livre de mise en œuvre de cette façon, j'ai juste besoin de passer d'une chaîne à cela, et à l'intérieur de ma fonction que j'appelle Postmessage
WPARAM
/LPARAM
peut-être pas la meilleure façon d'aller. Si c'est une API de Windows, faire ce que les docs disent (qui devrait être dit?).C'est quelque chose que je suis en train d'écrire un message défini par l'utilisateur, je n'ai pas encore utiliser deux paramètres, mais j'ai vu dans un livre de mise en œuvre de cette façon, j'ai juste besoin de passer d'une chaîne à cela, et à l'intérieur de ma fonction que j'appelle Postmessage
OriginalL'auteur Kobe | 2011-06-14
Vous devez vous connecter pour publier un commentaire.
Lors de l'envoi de messages,
WPARAM
etLPARAM
paramètres ont des interprétations, selon le message. Vous avez besoin de passer l'ensemble de ces paramètres dans la façon dont le message que vous envoyez attend d'eux d'être passé. Si vous définissez votre propre message (peut-être par un décalage deWM_USER
,WM_APP
, ouRegisterWindowMessage
), alors bien sûr vous avez un peu plus de latitude.Dans les jours de la 16-bits de Windows, un
WPARAM
est un mot de 16 bits, alors queLPARAM
est un 32 bits de long. Ces distinctions s'en alla dans Win32; ils sont tous deux devenus des valeurs de 32 bits.Selon cette,
LPARAM
est défini commeLONG_PTR
, qui en 64-bits de Windows est une signature, la valeur 64 bits.WPARAM
est défini commeUINT_PTR
, qui en 64-bits de Windows est un entier non signé, valeur 64 bits. Si vous définissez votre propre message, vous pouvez attribuer à ses paramètres en conséquence.OriginalL'auteur Aaron Klotz
C'est un message spécifique. Vous pouvez utiliser cette liste de messages définis par le système des catégories comme référence. Sélectionnez un groupe, puis un message de la part du groupe pour voir ce que le message indique que vous devriez passer, comme WPARAM/LPARAM.
Raymond Chen explique pourquoi nous avons deux params.
OriginalL'auteur lunixbochs
L'histoire de sa définition a évolué au fil des ans.
WINDOWS.H (Windows 2.03 SDK, c. 1988)
WinDefs.h (c. 1999)
WinDef.h (c. 2005)
Bonus De Lecture
W
est de 16 bits non signéeWORD
, etL
est signé de 32 bitsLONG
)Je dois avoir que de mal. J'ai juré à l'époque que c'était le cas. Je me souviens avoir pensé que la version 64 bits était comme 16 bits monde - où il y a une différence de taille entre les
WPARAM
etLPARAM
. Mais je vais revenir par le biais de fichiers d'en-tête et je ne peux pas pour la vie de me trouver maintenant. Donc je suppose que j'étais fou.OriginalL'auteur Ian Boyd
Oui, l'ordre des questions.
WPARAM
envoyé/posté un côté avec des vents jusqu'àWPARAM
sur l'autre extrémité; de même pourLPARAM
.Si vous avez vos propres messages, vous pouvez utiliser
WPARAM
etLPARAM
pour tout ce que vous voulez. (Il peut y avoir certaines conventions communes.)OriginalL'auteur seand
Oui, c'est fait. Une fois, j'ai dépassé dans échangé de l'ordre et de la fonction que j'ai d'échec de l'appel. Néanmoins, vous devriez consulter MSDN en cas de doute. Je n'ai jamais programme Win64, donc je n'ai pas de savoir si il y a des différences entre Win32 et Win64 concernant
WPARAM
/LPARAM
comportement.OriginalL'auteur LeleDumbo