2011-12-17 15 views
1

wxPanelに角が丸い四角形を描きたい。 以下に示すように、私はそれを透明にすることができません。白い部分は透明でなければなりません。パネル上に透明なビットマップを描画する

enter image description here灰色の領域は、ビットマップであり、その下wxPanel背景があります。 ビットマップ(wxBitmap)を描画するための私のコードは

wxMemoryDC temp; 
bitmap.Create(kWidth, kHeight); 
temp.SelectObject(bitmap); 
temp.SetBackground(*wxWHITE_BRUSH); 
temp.Clear(); 
temp.SetPen(wxPen(wxColor(80, 80, 80), 1)); 
temp.SetBrush(*wxTRANSPARENT_BRUSH); 
temp.DrawRectangle(0, 0, kWidth, kHeight); 
temp.SetBrush(wxBrush(backgroundColor)); 
temp.DrawRoundedRectangle(0, 0, kWidth, kHeight, kRadius); 

と(リフレッシュのため)blitingのためである私のコードは

void draw(wxDC& dc, wxPoint mousePosition) 
{ 
    wxMemoryDC temp; 
    temp.SelectObject(bitmap); 
    dc.Blit(wxPoint(kLeft, kTop), temp.GetSize(), &temp, wxPoint(0, 0), wxCOPY, true); 
} 

である。しかし上記のように出力されます。 私は何が間違っていますか?

+0

ビットマップのピクセル形式は、* depth *引数をビットマップコンストラクタで指定しないでください。 32bppはアルファ版が必要なので、wxWidgetsはそれをサポートしていません。 Windowsの場合は、gdiplusが必要です。 –

+0

私はアルファを必要としません。 24ビットでは不可能です。ただ一つの色が透明になりますか? –

+0

http://msdn.microsoft.com/en-us/library/dd145141%28v=VS.85%29.aspx –

答えて

0

wxMaskに同じ丸い四角形を描画します。見たいコーナーを黒く、見たい部分を白くします。次に、wxMaskオブジェクトでbitmap.SetMaskを呼び出します。マスクをwxBitmapに適用すると、Drawメソッドで適切にbltする必要があります。

0

親コントロールの黄色の背景が白い背景で丸められたコーナーの下にあることを確認するには、整形されたコントロールを作成する必要があります。 Windowsの場合、これはWinAPIのSetWindowRgn()関数を使用することによって達成できます。 あなたのwxPanelは透明ではありません。透明なブラシで描画していても、背景色はいくつかあります。形状コントロールを作成しないと、丸みを帯びたコーナーの不透明領域が表示されます。 他のプラットフォームでは、ネイティブ実装が必要です(これについては、デフォルトのwxWidgets APIはありません)。 LinuxとwxGTKの場合は、GetHandle()のwxWindowメソッドを使用してGdkWindow *を取得し、GDKのpixmapを使用して丸められたコントロールのシェイプを作成できます。

他の方法は、wxPanelで親の背景を取得し、それをパネル上に描画してから、丸い四角形を描画します。

関連する問題