supernicky
Goto Top

Programm hängt sich nach Schleife auf....

Windowsanwendung mit SetPixel Funktion

Hallo,

vielleicht kann mir hier jemand helfen...

ich habe ein Fenster (leer) und dort sollen vor der Funktion ShowWindow, ein paar schwarze Punkte gezeichnet werden.
Dafür habe ich eine Schleife erstellt die 100 mal durchlaufen werden soll.

invoke ShowWindow,hWnd, SW_SHOWNORMAL
invoke GetDC, hWnd ;Handle des DC der Form holen und in formdc speichern
mov formdc, eax

xor ecx,ecx ;ecx löschen
mov ecx, 220 ;ecx mit 220 belegen
mov tmp, ecx ;ecx in die Variable tmp kopieren
mov ecx, 100 ;ecx mit 100 belegen (für die Schleife)
malen:
invoke SetPixel, formdc,tmp,1, colr ;tmp sollte bei 220 beginnen und bei 120 enden

dec tmp ;immer eins subtrahieren
loop malen ;Schleife wiederholen solange ecx ungleich Null ist


invoke UpdateWindow,hWnd ;Fenster nach dem Zeichnen anzeigen


Was herauskommt ist ein schwarzer Strich am oberen Fensterrand...(wie gewünscht)
aber dannach hängt sich das Programm auf... Woran liegt das?

Die Linie geht bis zum Rand.. also hätte tmp ja den Wert 0 oder sogar kleiner...
Da ecx aber nur 100 hat (=100 Schleifendurchgänge) sollte tmp an Ende auch nur 220 - 100 = 120 haben... und demnach noch 120 Pixel vom Rand entfernt sein.

Wo ist denn hier der Fehlerteufel????

Gruß, Nicky

Content-ID: 167185

Url: https://administrator.de/contentid/167185

Ausgedruckt am: 25.11.2024 um 14:11 Uhr

76109
76109 30.05.2011 um 16:13:04 Uhr
Goto Top
Hallo supernicky!

Kommentar wieder entfernt, da sich der Beitragstext während des Schreibens vollständig geändert hatface-wink

Gruß Dieter
supernicky
supernicky 30.05.2011 um 16:16:54 Uhr
Goto Top
Hallo,

ich habe den Beitrag geändert... mein Edit-Feld geht jetzt... auch wenn noch keine Änderungen (außer über Funktionen) möglich sind...

Vielleicht kannst du mir bei dem oberen Problem auch helfen...

Gruß, Nicky
76109
76109 30.05.2011 um 16:50:02 Uhr
Goto Top
Hallo supernicky!

Bezugnehmend auf den vorhergehenden Beitragstext. Hast Du für die Variable 'formdc' und 'tmp' anstelle von
formdc db ?
tmp db ?
jeweils ein DWord für EAX/ECX reserviert ?
formdc dd ?
tmp dd ?

Gruß Dieter
supernicky
supernicky 30.05.2011 um 23:28:27 Uhr
Goto Top
Hallo Dieter,

ja das habe ich bei allen Variablen gemacht..

sobald ich die Zeile
"invoke SetPixel, formdc,tmp,1, colr "
ungültig mache, läuft das Programm fehlerfrei... nur die Linie oben fehlt dann.

Ich habe diese Schleife direkt hinter der CreateWindow - Funktion zum erstellen des Fensters.. und noch vor der UpdateWindow-Funktion, ist es vielleicht der falsche Ort dafür??

Nicky
supernicky
supernicky 05.06.2011 um 07:19:47 Uhr
Goto Top
Es war wohl tatsächlich der falsche Ort für die Zeichenfunktion.
Ich habe die Schleife hinter den BN_CLICK in der Nachrichtenschleife gelegt und dann geht es...