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
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
Bitte markiere auch die Kommentare, die zur Lösung des Beitrags beigetragen haben
Content-ID: 167185
Url: https://administrator.de/contentid/167185
Ausgedruckt am: 25.11.2024 um 14:11 Uhr
5 Kommentare
Neuester Kommentar
Hallo supernicky!
Kommentar wieder entfernt, da sich der Beitragstext während des Schreibens vollständig geändert hat
Gruß Dieter
Kommentar wieder entfernt, da sich der Beitragstext während des Schreibens vollständig geändert hat
Gruß Dieter
Hallo supernicky!
Bezugnehmend auf den vorhergehenden Beitragstext. Hast Du für die Variable 'formdc' und 'tmp' anstelle von
jeweils ein DWord für EAX/ECX reserviert ?
Gruß Dieter
Bezugnehmend auf den vorhergehenden Beitragstext. Hast Du für die Variable 'formdc' und 'tmp' anstelle von
formdc db ?
tmp db ?
formdc dd ?
tmp dd ?
Gruß Dieter