2011-12-17 196 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需要alpha工程,wxWidgets對它的支持有限。對於Windows,你需要,比如gdiplus。 –

+0

我並不完全需要阿爾法。在24位中是不可能的。只有一種顏色是透明的? –

+0

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

回答

0

在wxMask中繪製相同的圓角矩形。製作想要透過黑色看到的角落以及想要看到的部分爲白色。然後用你的wxMask對象調用bitmap.SetMask。將mask應用到你的wxBitmap中,它應該在你的Draw方法中正確地blt。

0

如果你想看到父母的控件的黃色背景在圓角下出現白色背景,你需要創建一個形狀控件。在Windows下,這可以通過使用WinAPI的SetWindowRgn()函數來實現。 您的wxPanel不透明。即使您使用透明畫筆繪製它,它也具有一些背景顏色,因此如果不創建成形控件,您將無論如何都會看到圓角下的不透明區域。 對於其他平臺,應該還有一些本地實現(我認爲沒有默認的wxWidgets API)。對於Linux和wxGTK,您可以使用wxWindow的GetHandle()方法獲得GdkWindow *,並使用GDK pixmap創建四捨五入控件的形狀。

另一種方式是在你的wxPanel下面獲取父件的背景,在你的面板上繪製它,然後繪製圓角矩形。