SelectClipRgn() in Schleife

Thomasio

Erfahrenes Mitglied
Ich möchte in einer Schleife 15 mal die gleiche Bitmap an verschiedenen Positionen im Fenster zeichnen
Dazu habe ich mir zuerst mal die Positionen berechnet und in 2 arrays gespeichert
Dann kann ich ganz prima mit BitBlt() zeichnen

Code:
for(int i = 0; i < 15; i++)
         {
             BitBlt(hdc, bildleft[i], bildtop[i], bm.bmWidth, bm.bmHeight, hdcMemBmp, 0, 0, SRCCOPY);
         }

Wenn ich ein rundes Bild zeichnen will, muss ich eine ClipRgn erstellen und setzen

Code:
HRGN rgn = CreateEllipticRgn(bildleft[i], bildtop[i], bm.bmWidth, bm.bmHeight);
SelectClipRgn(hdc, rgn);

Auch das funktioniert noch, solange die Bitmaps sich nicht überlappen
Leider überlappen sie sich aber des öfteren, also muss ich in der Schleife die ClipRgn wieder los werden, bevor das nächste Objekt gezeichnet wird
MSDN sagt, ich muss die ClipRgn auf NULL setzen, aber das habe ich nicht begriffen
Wenn ich versuche die ClipRgn zu setzen zeichnet er mir entweder gar nichts mehr, oder nur noch Bruchstücke

Wie bringe ich die beiden Codes von oben unter einen Hut, so dass er mir 15 schöne Kreise zeichnet, die sich auch überlappen können, ohne dabei den Hintergrund zu löschen?
 
Hat sich erledigt, mein Denkfehler, es muss heissen:

Code:
HRGN rgn = CreateEllipticRgn(bildleft[i], bildtop[i], bm.bmWidth + bildleft[i], bm.bmHeight + bildtop[i]);
 
Zurück