Set/GetWindowLongPtr
-
Hallo,
gegoogelt habe ich, FAQ gelesen habe ich, Forum durchsucht habe ich

Zu meinem Problem:
Ich möchte gerne ein "eigenes" Control schreiben. Dabei soll jedes Control (also Fenster) eigene Daten besitzen.
Ich dachte daher, dass ich beim Registrieren der WNDCLASSEX den Parameter cbWndExtra auf 4 setze (Ich brauche als zusätzliche Daten nur einen Pointer). Also 4 Byte reserviere.Dann wollte ich die Daten bei WM_CREATE mit
SetWindowLongPtr(hWnd, GWL_USERDATA, (long)meinPointer);setzen. Anschließend hole ich mir die Daten wieder mit
meinPointer = (POINTERTYPE*) GetWindowLongPtr(hWnd, GWL_USERDATA);wieder. Zumindest theoretisch. Praktisch funktioniert das leider überhaupt nicht.
Ich habe leider noch nie mit benutzerspezifischen Daten in Fenstern gearbeitet, deswegen weiß ich jetzt nicht weiter.
Für Hinweise, was ich falsch mache, wäre ich daher sehr dankbar

Gruß
plusman
-
hi, also bin mir nit ganz sicher aber kann es sein das du keine Adresse übergibst, kp was das für typ ist^^:
SetWindowLongPtr(hWnd, GWL_USERDATA, (long)&meinPointer);nur ein kleiner Tipp

MfG CodeFinder
-
Wenn du eh GWL_USERDATA benutzt brauchst du keine extra bytes in cbWndExtra angeben. Das GWL_USERDATA Feld hat JEDES Fenster automatisch. Warum es nicht geht ist aus deinem Code nicht ersichtlich, vielleicht setzt du ja die addresse einer lokalen Variable oder was weiss ich. Musstdu mehr code zeigen
-
Gollum Smaegol schrieb:
Wenn du eh GWL_USERDATA benutzt brauchst du keine extra bytes in cbWndExtra angeben. Das GWL_USERDATA Feld hat JEDES Fenster automatisch. Warum es nicht geht ist aus deinem Code nicht ersichtlich, vielleicht setzt du ja die addresse einer lokalen Variable oder was weiss ich. Musstdu mehr code zeigen
Lag wirklich an einer lokalen Addresse. Warum ich gerade die verwendet habe, ist mir nicht verständlich. Ich habe mir vorher noch so oft gesagt "Verwende bloß nicht die lokale Addresse."

Ajo, noch eine Frage. Momentan verwende ich nur einen Pointer, der auf ein Array verweist. Möchte ich jetzt aber mehrere Daten speichern, muss ich die Daten dann in eine eigene Struktur legen und einen Pointer auf die Struktur übergeben oder gibt es eine andere Möglichkeit? Z.B. über eigene definierte Indizes bei SetWindowLongPtr im Sinne von GWL_USER_FILENAME, GWL_USER_AGE etc.