Fragen zur GDI Programmierung (auch an C-Programmierer)
Hallo,
Ziel: zeichnen in einem DC und blitten auf die Form
Problem: Form bleibt immer leer
Hallo,
ich möchte meine Zeichenfunktionen erst in einer Speicherbitmap ausführen und zum Schluss auf die Form blitten.
hier mal der Code aus dem Paint Ereignis
.if uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
mov eax, 0
ret
.elseif uMsg == WM_PAINT
invoke CreateDC, 0,0,0,0 ;hier liegt wohl ein Fehler im ersten Parameter
mov DC, eax
invoke CreateCompatibleDC, DC
mov cDC,eax
invoke CreateCompatibleBitmap, DC, 400, 400
mov cBM, eax
;###############################################
xor ebx, ebx
mov bl, 100
mov bh, 100 ;Farbe festlegen für das Pen-Object
shl ebx, 8
mov bl, 100
mov colr, ebx
################################################
invoke CreatePen, 0, 1, colr ;Pen erstellen
mov stift, eax
invoke SelectObject, cDC, cBM
invoke BitBlt, cDC, 0, 0, 400, 400, DC, 0, 0, SRCCOPY
invoke SelectObject, DC, stift
invoke Rectangle, cDC,10,10,100,100
invoke BitBlt, formdc, 0, 0, 400, 400, cDC, 0, 0, SRCCOPY
invoke DeleteObject, DC
invoke DeleteObject, cDC
invoke DeleteObject, cBM
invoke DeleteObject, stift
.endif
Der Code wird fehlerfrei kompiliert, also denke ich mal das es irgendwo an den Parametern hängt.
Mein Vorgehen:
erstellen eines DeviceContext = DC
wie oben schon steht glaube ich das hier schon ein Fehler im ersten Parameter drin ist...
erstellen eines CompatibleDeviceContext = cDC
erstellen einer CompatibleBitmap mit den Maßen 400,400 = cBM
Farbe auf Grau einstellen
Pen Objekt erstellen und ein Rechteck auf dem CompatibleDeviceContext zeichnen (nicht in die CompatibleBitmap oder?)
den CompatibleDeviceContext auf die Form blitten
Objekte löschen
Leider bleibt die Form leer..
Ich hoffe mir kann jemand helfen...
Direkt auf die Form zeichnen klappt super, nur habe ich da diesen Flimmereffekt, den möchte ich damit vermeiden.
Ein paar Stichpunkte würden mir schon helfen was die Reihenfolge zum erstellen der Speicherbitmap angeht.
Danke und Gruß,
Nicky
Ziel: zeichnen in einem DC und blitten auf die Form
Problem: Form bleibt immer leer
Hallo,
ich möchte meine Zeichenfunktionen erst in einer Speicherbitmap ausführen und zum Schluss auf die Form blitten.
hier mal der Code aus dem Paint Ereignis
.if uMsg == WM_DESTROY
invoke PostQuitMessage,NULL
mov eax, 0
ret
.elseif uMsg == WM_PAINT
invoke CreateDC, 0,0,0,0 ;hier liegt wohl ein Fehler im ersten Parameter
mov DC, eax
invoke CreateCompatibleDC, DC
mov cDC,eax
invoke CreateCompatibleBitmap, DC, 400, 400
mov cBM, eax
;###############################################
xor ebx, ebx
mov bl, 100
mov bh, 100 ;Farbe festlegen für das Pen-Object
shl ebx, 8
mov bl, 100
mov colr, ebx
################################################
invoke CreatePen, 0, 1, colr ;Pen erstellen
mov stift, eax
invoke SelectObject, cDC, cBM
invoke BitBlt, cDC, 0, 0, 400, 400, DC, 0, 0, SRCCOPY
invoke SelectObject, DC, stift
invoke Rectangle, cDC,10,10,100,100
invoke BitBlt, formdc, 0, 0, 400, 400, cDC, 0, 0, SRCCOPY
invoke DeleteObject, DC
invoke DeleteObject, cDC
invoke DeleteObject, cBM
invoke DeleteObject, stift
.endif
Der Code wird fehlerfrei kompiliert, also denke ich mal das es irgendwo an den Parametern hängt.
Mein Vorgehen:
erstellen eines DeviceContext = DC
wie oben schon steht glaube ich das hier schon ein Fehler im ersten Parameter drin ist...
erstellen eines CompatibleDeviceContext = cDC
erstellen einer CompatibleBitmap mit den Maßen 400,400 = cBM
Farbe auf Grau einstellen
Pen Objekt erstellen und ein Rechteck auf dem CompatibleDeviceContext zeichnen (nicht in die CompatibleBitmap oder?)
den CompatibleDeviceContext auf die Form blitten
Objekte löschen
Leider bleibt die Form leer..
Ich hoffe mir kann jemand helfen...
Direkt auf die Form zeichnen klappt super, nur habe ich da diesen Flimmereffekt, den möchte ich damit vermeiden.
Ein paar Stichpunkte würden mir schon helfen was die Reihenfolge zum erstellen der Speicherbitmap angeht.
Danke und Gruß,
Nicky
Please also mark the comments that contributed to the solution of the article
Content-ID: 167482
Url: https://administrator.de/contentid/167482
Printed on: October 4, 2024 at 06:10 o'clock
1 Comment