SetWindowText - richtiges Handle, falsches Fenster
-
Moin!
Bin grad dabei bissl was am WinAPI rumzuproggen. Ich öffne eine (selbst geschriebene) Datei des Formats *.wt5 und lese daraus die Versionsnummer. Das passiert in einer anderen cpp deshalb steht hier nix davon. Das nur damit ihr nicht verwirrt seid.
Jedenfalls öffne ich die wt5-Datei mit einem "Datei öffnen" knopf, lese die Version aus, wandle sie in ein String und schreibe sie per SetWindowText in eine Editbox.Problem: Die ausgelesene Versionsnummer landet nicht in der Editbox, sondern ersetzt die Beschriftung vom "Datei öffnen"-Knopf. Und ich hab keeeeine Ahnung warum. Das Handle das ich angegeben hab weist auf die Editbox nicht den Button. Bin total verwirrt.
Weis jemand Rat?
Meinen Code findet ihr HIER
greets
Dergel
-
deine Variable hEdit bekommt ihren Wert, wenn WndProc mit dem Parameter WM_CREATE aufgerufen wird. Diesen Wert behält sie allerdings nicht bei - bei jedem neuen Aufruf von WndProc wird sie neu angelegt. Damit eine einmalige Zuweisung auch bei wiederholem Aufruf von WndProc nicht gelöscht wird, setze einfach das wort "static" vor HWND hEdit.
-
Also daaaaas is n guter Tipp. Hab ich garnich dran gedacht.
Aber:
VerBuf wird immernoch auf den Button geschrieben statt in das Editfeld, was ja das eigentliche Problem war.Edit: Möchtest du die Variable static machen oder möchtest du das hEdit-Feld in ein static Feld umwandeln?
Wobei beides nichts nützen würde bei meinem Problem... wie sollte das denn helfen?
-
Erm... Er hat Recht. Die Variablen werden zwar richtig zugewiesen, allerdings sind die Variablen nur lokal gespeichert und bekommen bei jedem WndProc-Durchlauf einen neuen Speicherbereich, der allerdings beim Verlassen der Funktion wieder freigegeben wird. Generell wäre irgendeine Struktur, in der du deine Fensterelemente speicherst, recht hilfreich, da du dadurch problemlosen Zugriff darauf bekommst. Denk da mal über eine Klasse nach.
Viel Spaß noch
- EL<Edit>
Du definierst hEdit zwei mal. Wenn du es oben als static definierst, gelangst du unten in einen anderen Gültigkeitsbereich, wo du erneut die Variable definierst. Wenn du sie unten static definierst, gelten sie trotzdem nur innerhalb des Gültigkeitsbereiches.Mach sie unten weg und oben static. Dann müsste es gehen.
btw: hOpen gilt auch nur innerhalb des Gültigkeitsbereiches von WM_CREATE. Mach es am Besten (für deine momentanen Verhältnisse) dort raus, static und an den Anfang von WndProc.
-
Ahaaaa!
Erleuchtung komme!Hab garnich registriert das ich die zweima deklariert hab.
Ich packs jetz echt ma in Klassen dann isses übersichtlicher und sowas passiert hoffentlich nich nochma...Danke jedenfalls.
PS: Erik, du hast ja keeeeeine Ahnung. Extra anmelden um die andere zu berichtigen und dabei merken das sie schon recht haben. Tz.
greets
Dergel