Bildschirmausgabe flackert

Hier könnt ihr sowohl zur x86 Architektur als auch zu Win32ASM Fragen stellen.

Moderatoren: crack, Krüsty, Marwin

Beitragvon bubsoft » Freitag 10. September 2004, 11:34

Hallo Forum,
habe endlich mal wieder Zeit, mit masm32 zu programmieren (zu versuchen). Habe eine Digitaluhr geschrieben mit einer eigenen Segmentanzeige. Das Fenster wird alle Sekunde neu aufgebaut. Die Segmentanzeige wird wird mit dem api "SetPixel" aufgebaut. Dabei ist ein ständiges Flackern des Fensterinhaltes zu erkennen. Da alle Versuche, dass Verhalten zu ändern, mißlungen sind, habe ich das Testprogramm von Iczelion TuT 25 (Bitmap-ausgabe) genommen und um " invoke SetTimer,hWnd,Timer_Sek,1000,NULL" sowie um ".elseif uMsg == WM_TIMER" und " invoke InvalidateRect,hWnd, NULL, 1" erweitert. In der .Data habe ich noch "Timer_Sek equ 0" eingefügt. Auch hier ist ein Flackern des Bildschirmes zu erkennen. Was mache ich falsch, wie kann man diesen Effekt umgehen?

Danke für Eure Bemühungen
bubsoft
Member
 
Beiträge: 10
Registriert: Donnerstag 18. September 2003, 14:40

Beitragvon CDW » Freitag 10. September 2004, 19:35

hm, du musst in einen Puffer zeichnen und den dann auf einmal in die ausgabe kopieren. Am besten erklärt es dieses Tut:
http://spiff.tripnet.se/~iczelion/source0.html
ESF (eleminating screen flicker) das ist ein Sorucecode mit kommentar.
CDW
Alter Hase
 
Beiträge: 62
Registriert: Donnerstag 2. Oktober 2003, 17:17

Beitragvon bubsoft » Montag 20. September 2004, 10:58

Hallo CDW,
vielen Dank für deinenTip, ich habe gem. dem Beispiel alles in mein Prog. eingebaut, der Effekt hat sich leider nur unwesentlich geändert. Aufgrund tiefergehendem Studiums der API-Beschreibung habe ich jetzt die Lösung gefunden. Das eigentliche Problem liegt wohl beim "invoke InvalidateRect,hWin, NULL, 1". Dadurch wird erst das Fenster gelöscht und wieder aufgebaut, was bei sekündlichem Aufruf ein sichtbares Flackern erzeugt. Habe durch Ausprobieren letztendlich -auf Basis des "eleminating screen flicker" - einen "invoke RedrawWindow,hWin, ADDR Ps, NULL, RDW_INTERNALPAINT" eingebaut und meine Digitaluhr wird so angezeigt, wie es sich gehört.
Nochmals vielen Dank für die Hilfe.
bubsoft
Member
 
Beiträge: 10
Registriert: Donnerstag 18. September 2003, 14:40


Zurück zu Assembler

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder

cron