2009-05-08 4 views
1

Ich benutze Gdi + und C++. Ich habe eine Frage zu SolidBrush. Wie man einen SolidBrush klont?Wie klon ich eine Solidbrush in GDI + C++

SolidBrush* oldBrush xxx; 
Brush* newBrush = oldBrush->Clone(); 

Ich fand newBrush ist ein Brush-Objekt. Was bedeutet, wenn ich dynamic_cast<SolidBrush>(newBursh) verwende, werde ich immer NULL bekommen.

Ich lese die .h-Datei von gdi + SolidBrush scheint verwendet Brush virtuelle Clone-Methode, es nicht überschreiben!

Warum?

Danke für Lösungen, aber ich habe noch eine Frage? Warum implementiert SolidBrush keine Clone-Methode?

Antwort

-1

Sie können einfach die Farbeigenschaft von SolidBrush verwenden und sie wird geklont. Es ist ein SolidBrush, deshalb ist Farbe sowieso nur wichtig.

So etwas sollte funktionieren:

Brush* newBrush = new Brush(oldBrush->Color);

+0

Pinsel ist virtuell und kann nicht instanziiert werden – korbes

1

Brush kann alles SolidBrush kann tun. SolidBrush ist nur eine bequeme Möglichkeit, eine Brush mit einer einfarbigen zu erstellen.

Hier ist ein Beispiel von this example at MSDN abgeleitet:

SolidBrush solidBrush(Color(255,255,0,0)); 
Brush *clone = solidBrush.Clone(); 

Sie können dann gehen Sie einfach weiter und clone wie jede andere Bürste verwenden und es wird genau verhalten sich wie solidBrush.

0

Warum SolidBrush keine Clone-Methode implementieren?

SolidBrush erbt die clone Methode aus Bürste. Eine erneute Implementierung in SolidBrush wäre überflüssig.

+0

Eigentlich denke ich Klon-Methode sollte sein eigenes Konstrukt aufrufen, so dass es übergangen werden muss. Wie kann es sonst ein Objekt seines eigenen Typs erstellen? – user25749

+0

Die 'SolidBrush'-Klasse erstellt genau den gleichen Typ von GDI + -Objekt wie die' Brush'-Klasse. Diese Klassen sind einfach C++ - Wrapper über C-APIs und 'Brush :: Clone' ruft nur' :: GdipCloneBrush' auf und umschließt das Ergebnis in einem neuen 'Brush'-Objekt (NICHT ein' SolidBrush'-Objekt). Der Code ist genau dort in 'GdiPlusBrush.h', du solltest es dir anschauen. –