Ausgefüllten Kreis mit weiterem Kreis drum herum
-
Hi!
Ich habe wieder ein Problemchen.
Ich möchte einen ausgefüllten Kreis mit einem Kreis drum herum erstellen.
Wie realisiere ich das am besten??
Hier mein Quellcode mit einem normalen Kreisvoid Kreismitkreis::draw(CDC* pDC) { CBrush* myBrush = new CBrush(RGB(0,0,0)); CPen myPen(PS_SOLID, 1, RGB(0,0,0)); pDC->SelectObject(myBrush); pDC->SelectObject(&myPen); pDC->Ellipse(position.x - 20, position.y - 20, position.x + 20, position.y + 20); //aufräumen SAFE_DELETE(myBrush); }Ich habe schon versucht einfach noch eine Ellipse die größer ist rein zu bauen aber ich bekomme dann immer nen größeren ausgefüllten Kreis.
Aussehen soll das Objekt wie im folgenden Link:
http://img187.imageshack.us/img187/7136/kreisimkreisut2.jpgSchon mal vielen Dank im Voraus!!
Gruß Dirk
-
Indem Du einfach einen zweiten Kreis malst... Ich verstehe Dein Problem nicht. Wenn jeder irgendwie gefüllt sein soll, malst Du von außen nach innen.
Anmerkung: Du musst die selektierten Objekte aus dem DC auch wieder freigeben sonst erzeugst Du Leaks! Dein Code so wie er ist ist buggy!
-
Ich möchte ja nen Kreis in einem Kreis und beim äusseren soll halt nur die äussere Linie gezeichnet werden und beim inneren soll der innere Kreis ausgefüllt werden. Ich hab auch schon folgenden Code verwendet, dabei kann ich den ersten Kreis dann optimal zeichnen aber jeder weitere wird nur ein großer ausgefüllter Kreis.
void Endknoten::draw(CDC* pDC) { CBrush* myBrush = new CBrush(RGB(255,255,255)); CPen myPen(PS_SOLID, 1, RGB(0,0,0)); pDC->SelectObject(&myPen); pDC->Ellipse(position.x - 20, position.y - 20, position.x + 20, position.y + 20); pDC->SelectObject(myBrush); pDC->Ellipse(position.x - 17, position.y - 17, position.x + 17, position.y + 17); //aufräumen SAFE_DELETE(myBrush); }Warum ist der Code buggy? Check ich net

-
Ich habs jetzt so gelöst, aber ich wäre echt happy wenn du mir noch schnell erklären könntest warum mein Code buggy ist.
void Endknoten::draw(CDC* pDC) { CBrush* myBrush = new CBrush(RGB(255,255,255)); CPen myPen(PS_SOLID, 1, RGB(0,0,0)); pDC->SelectObject(&myPen); pDC->SelectObject(myBrush); pDC->Ellipse(position.x - 20, position.y - 20, position.x + 20, position.y + 20); myBrush = new CBrush(RGB(0,0,0)); pDC->SelectObject(myBrush); pDC->Ellipse(position.x - 17, position.y - 17, position.x + 17, position.y + 17); //aufräumen SAFE_DELETE(myBrush); }Gruß Mav
-
1. Wenn Du keine Füllung möchtest dann besorge dir den NULL_BRUSH oder HOLLOW_BRUSH
2. Dein Code ist buggy weil:
a. Du erzeugst ein GDI Objekt
b. Selektierst ihn in einen DC
c. Deselektierst ihn nicht
d. Löscht es.BTW: Es ist absolut unnötig Objekte mit new zu erzeugen. Und Du erzeugst mit dem zweiten new ein Speicherleak!
Korrekt wäre:
CBrush myBrush(RGB(255,255,255)); CPen myPen(PS_SOLID, 1, RGB(0,0,0)); CPen*pOldPen = pDC->SelectObject(&myPen); CBrush* pOldBrush = pDC->SelectObject(&myBrush); pDC->Ellipse(position.x - 20, position.y - 20, position.x + 20, position.y + 20); CBrush myBrush2(RGB(0,0,0)); pDC->SelectObject(&myBrush2); pDC->Ellipse(position.x - 17, position.y - 17, position.x + 17, position.y + 17); pDC->SelectObject(pOldBrush); pDC->SelectObject(pOldPen);Du beachtest in keiner Weise die Grundzüge der GDI Programmierung. Wie wäre es mit einem Tutorial

-
Vielen Dank!!
Bin noch etwas an den Anfänge und hab mir das ja auch erst nach "Studium" von Tutorials zusammen gebaut. Aber ich hoffe mal, dass ich das mit der Zeit auch alles hin bekomme

Aber nochmals vielen Dank für die Tips
Ich werde Sie jetzt mal umsetzen
Gruß Mav
-
Was hab ich da oben nur für ein Deutsch verwendet???
Mich packt schon langsam der Wahnsinn
Aber man merkt hier voll wer ein Noob ist und wer da schon mehr Erfahrung hat.
Ich war jetzt mal so frei mich an deinem Vorschlag zu orientieren.
Vielen Dank noch mal!!!!Gruß Mav