2009-05-08 15 views
1

gdi +とC++を使用しています。 SolidBrushについて質問があります。 SolidBrushを複製するには?GDI + C++でソリッドブラシを複製する方法

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

見つかったnewBrushはブラシオブジェクトです。 つまり、dynamic_cast<SolidBrush>(newBursh)を使用すると、私はいつもNULLを取得します。

gdiの.hファイルを読みました+ SolidBrushはブラシの仮想クローンメソッドを使用しているようですが、それを上書きしません!

なぜですか?

解決していただきありがとうございますが、まだ質問がありますか?なぜSolidBrushはClone Methodを実装していないのですか?

答えて

-1

SolidBrushのcolorプロパティを使用するだけで、それが複製されます。それはSolidBrushだから、とにかく重要なのは色だけです。

このような何かが動作するはずです:

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

+0

ブラシは仮想であり、インスタンス化することはできません – korbes

1

BrushはすべてSolidBrush缶を行うことができます。 SolidBrushは、単色のBrushを作成する便利な方法です。ここで

this example at MSDN由来例です:

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

あなたはその後、ちょうど先に行くと、他のブラシのようなcloneを使用して、それが正確にsolidBrushように振る舞うだろうことができます。

0

なぜSolidBrushはクローンメソッドを実装していないのですか?

SolidBrushは、ブラシのcloneメソッドを継承します。 SolidBrushに再度実装することは冗長です。

+0

実際には、クローンメソッドは独自の構造体を呼び出す必要があるため、オーバーライドする必要があります。それ以外の場合は、独自のタイプのオブジェクトをどのように作成できますか? – user25749

+0

'SolidBrush'クラスは' Brush'クラスとまったく同じタイプのGDI +オブジェクトを作成します。これらのクラスは、C API上のC++ラッパーであり、 'Brush :: Clone'は単に' :: GdipCloneBrush'を呼び出し、その結果を新しい 'Brush'オブジェクト(' SolidBrush'オブジェクトではありません)にラップします。コードは 'GdiPlusBrush.h'にあります。あなたはそれを見てください。 –

関連する問題