2011-12-17 3 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가 존재하지 않습니다). 리눅스와 wxGTK의 경우 wxWindow의 GetHandle() 메서드를 사용하여 GdkWindow *를 얻을 수 있으며 GDK 픽스맵을 사용하여 둥근 컨트롤의 모양을 만들 수 있다고 생각합니다.

다른 방법은 wxPanel에서 부모의 배경을 패널에 그린 다음 둥근 사각형을 그립니다.