Parameter WPARAM und LPARAM
Beim übergeben eines Wertes an eine Funktion, die nimmt sowohl eine WPARAM-und LPARAM-parameter, spielt es eine Rolle, auf welche ich weitergeben? Jemand sagte mir, dass wenn ich Windows x64 sollte ich verwenden WPARAM; ist das wahr?
Sprechen Sie über eine Windows-API oder eine Funktion, die Sie schreiben? Wenn es etwas, das Sie schreiben, beschreiben, was die Argumente sind - es gibt eine gute chance, dass
Es ist etwas, das ich Schreibe, für eine benutzerdefinierte Nachricht, die ich nicht selbst verwenden zwei Parameter, aber ich sah in einem Buch umgesetzt wird dieses Weg, ich muss nur eine Zeichenfolge übergeben, und in meiner Funktion, die ich Aufruf Postmessage
WPARAM
/LPARAM
vielleicht nicht der beste Weg zu gehen. Wenn es eine Windows-API zu tun, was die docs sagen (sollte das gesagt werden?).Es ist etwas, das ich Schreibe, für eine benutzerdefinierte Nachricht, die ich nicht selbst verwenden zwei Parameter, aber ich sah in einem Buch umgesetzt wird dieses Weg, ich muss nur eine Zeichenfolge übergeben, und in meiner Funktion, die ich Aufruf Postmessage
InformationsquelleAutor Kobe | 2011-06-14
Du musst angemeldet sein, um einen Kommentar abzugeben.
Beim senden von Nachrichten
WPARAM
undLPARAM
Parameter haben spezifische Interpretationen je nach Meldung. Sie müssen übergeben Sie die Parameter in der Weise, dass die Nachricht, die Sie senden erwartet, dass Sie übergeben werden. Wenn Sie die Definition Ihrer eigenen Nachricht (vielleicht über ein offset vonWM_USER
,WM_APP
, oderRegisterWindowMessage
), dann haben Sie offensichtlich ein bisschen mehr Spielraum.In den Tagen der 16-bit-Windows, ein
WPARAM
war ein 16-bit-Wort, währendLPARAM
war ein 32-bit lang. Diese Unterscheidungen gingen in Win32; Sie wurden beide 32-bit-Werte.Laut diese,
LPARAM
ist definiert alsLONG_PTR
, die in 64-bit-Windows ist eine vorzeichenbehaftete 64-bit-Wert.WPARAM
ist definiert alsUINT_PTR
, die in 64-bit-Windows ist eine vorzeichenlose 64-bit-Wert. Wenn Sie die Definition Ihrer eigenen Nachricht, möchten Sie vielleicht weisen Sie Ihre Parameter entsprechend.InformationsquelleAutor Aaron Klotz
Die Geschichte von der definition über die Jahre verändert hat.
WINDOWS.H (Windows 2.03-SDK, c. 1988)
WinDefs.h (c. 1999)
WinDef.h (c. 2005)
Bonus Lesen
W
ist für vorzeichenlose 16-bit -WORD
, undL
ist für vorzeichenbehaftete 32-bit -LONG
)Ich muss bekommen haben, falsch ist. Ich schwor damals, dass es der Fall war. Ich erinnere mich, dass 64-bit war wie 16-bit-Welt, wo es eine Größe Unterschied zwischen
WPARAM
undLPARAM
. Aber ich werde wieder durch header-Dateien und ich kann nicht für das Leben von mir finden. Also denke ich, ich sei verrückt.InformationsquelleAutor Ian Boyd
Er die Botschaft. Sie können diese Liste der system-Nachricht definiert Kategorien als Referenz. Wählen Sie eine Gruppe, dann eine Nachricht von der Gruppe, um zu sehen, was die Meldung gibt an, Sie sollten vergehen, als WPARAM/LPARAM.
Raymond Chen erklärt warum haben wir zwei params.
InformationsquelleAutor lunixbochs
Ja, die Reihenfolge ist wichtig.
WPARAM
gesendet/gepostet in einer Seite windet sichWPARAM
am anderen Ende; ebenso fürLPARAM
.Wenn Sie Ihre eigene benutzerdefinierte Nachrichten, die Sie verwenden können
WPARAM
undLPARAM
für alles, was Sie wollen. (Möglicherweise gibt es einige Allgemeine Konventionen, obwohl.)InformationsquelleAutor seand
Ja, tut es. Ich habe einmal an Ihnen vorbei in vertauschter Reihenfolge und die Funktion der ich-Aufruf fehlschlägt. Dennoch, Sie sollten die MSDN konsultieren, wenn im Zweifel. Ich habe nie das Programm in Win64 obwohl, also ich weiß nicht, ob es Unterschiede zwischen Win32-und Win64-Bezug
WPARAM
/LPARAM
Verhalten.InformationsquelleAutor LeleDumbo