Probleme mit GDI

Hallo!

Ich habe zur Zeit ein enormes Problem mein Programm das ich mit C++ und der GDI programmiert habe zum Laufen zu bringen. Ich zeichne mit der GDI geometrische Formen in mein Fenster. Wenn die GDI übermässig oft gezeichnet hat ( so 20 - 30 mal das Fenster ) wird auf einmal der Hintergrund des Fensters weiß und es treten andere grafische Fehler auf. Was mache ich falsch? Ich zeichne nur im Bereich von WM_PAINT, die Nachrichten zum Neuzeichnen erzeuge ich über InvalidRect, Ich erstelle Malwerkzeuge und gebe sie wieder frei, ich schreibe Begin- und EndPaint und ich gebe auch alle DCs wieder ordentlich frei. Weiß jemand etwas dazu?

Florian

Bist du wirklich ganz Sicher daß du alle DC wieder freigibst?
Sowas kommt nämlich meist davon wenn man nicht mit ReleaseDC() alles wieder freigibt.

Gruß Pauli

Hallo

Bist du wirklich ganz Sicher daß du alle DC wieder freigibst?
Sowas kommt nämlich meist davon wenn man nicht mit ReleaseDC()
alles wieder freigibt.

Ja, bin GANZ sicher…hab’ aber jetzt die Lösung schon gefunden - ich finde es verwunderlich, daß es in KEINER Doku erwähnt wird, daß man DeleteObject erst NACH ReleaseDC wieder aufrufen darf - das geht zwar sehr lange gut, wenn man dann aber wirklich extrem viel zeichnet ( das hab’ ich gemacht ) merkt man das die GDI nicht mehr funzt - ich habe aber seitdem ich DeleteObject dahinter stehen habe dieses Problem überhaupt nicht mehr…hast du das gewußt???

Florian

Hallo!
In der MSDN steht:
Do not delete a drawing object (pen or brush) while it is still selected into a device context.

Ich weiß nicht wie das bei dir war, aber vieleicht hast du dieses Objekt Selektiert gehabt, und DeleteObject() ist fehlgeschlagen.
Dadurch ist eventuell auch der Aufruf von ReleaseDC() danebengegangen (MSDN: If the device context is not released, the return value is zero. aber wer prüft schon eine Freigabe??)
genau weiß ich das aber auch nicht.

Wie dem auch sei, seltsam ists trotzdem…
Gruß Pauli

HI!

Ja, das ist ja genau das was ich falsch gemacht habe - es steht bloß in meiner Programmier - libary und meinem API Buch nicht drin *grrrrrrrrrrrrrrrr*.

Florian