LPARAM und WPARAM



  • Hallo,

    mir ist mal wieder etwas aufgefallen, das ich nicht so ganz verstehe:
    Bei einigen Funktionen werden die beiden Parameter LPARAM und WPARAM uebergeben, aber zu welchem Zweck? Was bedeutet WPARAM und was LPARAM?

    Kann mich da mal bitte jemand kurz aufklaeren oder Links zu entsprechenden Erklaerungsseiten posten? Waere nett.

    Danke.



  • Das sind einfach zwei Parameter, die abhängig vom Kontext bestimmte Werte enthalten (transportieren) können. Welche Werte konkret dahinter sind ist von der jeweiligen Funktion abhängig und sollte in der Doku ersichtlich sein.

    Simon



  • Und warum ist das nicht einfach void*, sondern irgend ein komisches __w64? Und warum eines long, und eines unsigned int?


  • Mod

    Weil dieser Wert einen Zeiger oder ein DWORD aufnehmen kann. Da aber ein DWORD in 64bit Umgebung immer noch 32bit ist aber ein Zeiger 64bit hat wurde entsprechende Compiler-Schalter eingebaut, die gegenenenfalls auf korrekte Definition (auch für 32bit) achten.

    Es ist einfach ein Platzhalter und nur in einigen Verwendungen verbirgt sich hinter dem Wert ein Zeiger.



  • ivoid schrieb:

    Und warum ist das nicht einfach void*

    Mit void kann der Compiler keine Syntax- und Typenprüfung durchführen.

    ivoid schrieb:

    irgend ein komisches __w64?

    Hmmm, hast Du vielleicht in den IDE- bzw. Compiler-Optionen auf "64Bit Applikation" eingestellt?
    Speziell dafür fehlt mir noch die Erfahrung für weitere Erklärungen.

    ivoid schrieb:

    Und warum eines long, und eines unsigned int?

    Das war schon unter Win3.1 (möglicherweise sogar in noch früheren Versionen?) so, und wurde wegen Kompatibilität beim Umstieg auf Win32 (ab Windows 95 und NT3.5/NT4) übernommen.

    Martin



  • Martin Richter schrieb:

    ein DWORD in 64bit Umgebung immer noch 32bit ist aber ein Zeiger 64bit hat

    Ein Zeiger? Von welchem Typ? Ist es nicht so, dass wenn die Applikation 32bit kompiliert ist, es keinerlei Unterschiede in einer 64bit-Umgebung gibt?



  • What do the letters W and L stand for in WPARAM and LPARAM?
    http://blogs.msdn.com/oldnewthing/archive/2003/11/25/55850.aspx


  • Mod

    ivoid schrieb:

    Martin Richter schrieb:

    ein DWORD in 64bit Umgebung immer noch 32bit ist aber ein Zeiger 64bit hat

    Ein Zeiger? Von welchem Typ? Ist es nicht so, dass wenn die Applikation 32bit kompiliert ist, es keinerlei Unterschiede in einer 64bit-Umgebung gibt?

    Sicher binär ändert sich Dein Programm nicht. Man kann jedoch Programm so schreiben dass sie sich für 64bit als auch 32bit portabel kompilieren lassen und da gibt es eben schon Unterscheide zwischen einen DWORD und DWORD_PTR!



  • Die Bezeichnungen WPARAM und LPARAM stammen aus dem ersten 16-BitWindows. PARAM heisst Parameter und ist damit von der Funktion abhängig. W steht für WORD (unter 16 bit-Windows 16 bit), L steht für LONG (unter 16-bit Windows 32 bit). Das ist schon alles!



  • Okay, die Bezeichnungen haette man geklaert. Aber wann setze ich WPARAM ein, und wann LPARAM? Die Erklaerung, dass Integer-Werte immer ueber WPARAM uebergeben wuerden und Pointer / Zeiger immer ueber LPARAM, genuegt mir dabei nicht. Danke trotzdem fuer den Blogeintrag.

    Ein Beispiel, wodurch ich auf das Thema gekommen bin:

    <a href= schrieb:

    audacia">Google hilft 😉
    [```cpp
    SendMessage (MyComboBox->Handle, CB_SETITEMHEIGHT, -1, 10);

    Was bedeutet hier z.B. -1 ? Warum nicht 0 ?



  • Vielleicht weil Du vergessen hast die Doku zu lesen?
    http://msdn.microsoft.com/en-us/library/bb775911.aspx



  • Beschreibung der Message:

    index

    Value of wParam. Specifies the component of the combo box for which to set the height.
    This parameter must be -1 to set the height of the selection field. It must be zero to set the height of list items, unless the combo box has the CBS_OWNERDRAWVARIABLE style. In that case, the index parameter is the zero-based index of a specific list item.



  • Gut, dann versteh' ich jetzt den Einsatz von WPARAM und LPARAM. Mehr wollte ich gar nicht. Danke.


Anmelden zum Antworten