2016-08-01 12 views
0

투명 wxTextCtrl :wxWidgets에 나는 다음과 같이 자신을 그것에서 운전하고 텍스트를 그려 <code>wxTextCtrl</code> 사용자 정의 투명을 만들려고 해요

BEGIN_EVENT_TABLE(TextLayer, wxTextCtrl) 
    EVT_PAINT(TextLayer::OnPaint) 
    EVT_ERASE_BACKGROUND(TextLayer::OnEraseBackground) 
END_EVENT_TABLE() 

void TextLayer::OnEraseBackground(wxEraseEvent& event) {} 
void TextLayer::OnPaint(wxPaintEvent & evt) 
{ 
    wxAutoBufferedPaintDC dc(this); 
    PrepareDC(dc); 

    wxGraphicsContext *gc = wxGraphicsContext::Create(dc); 

    if(gc) 
    { 
     dc.SetFont(GetFont()); 
     dc.SetTextForeground(GetForegroundColour()); 
     auto a = GetValue(); 
     dc.DrawText(GetValue(), 0, 0); 
     delete gc; 
    } 
} 

을하지만 작동하지 않습니다, 그것은 내가하기로되어있어 어떻게 투명 아니다 제대로 할거야?

+0

투명 패널을 만들고 초점을 맞추고 EVT_KEY_DOWN/EVT_PAINT 이벤트를 잡는 것이 좋습니다. 그 이유는 - 네이티브 컨트롤 페인팅을 덮어 쓸 수는 없기 때문입니다. – Igor

+0

OnPaint 함수에서 이벤트를 바로 멈추는 것처럼 보이는 것처럼 TextLayer 클래스에서 evt.Skip()을 호출하십시오. – macroland

답변

1

미안하지만 네이티브 컨트롤을 투명하게 만들 수 없습니다. wxGTK ("erase"샘플 참조)를 사용하여 사용자 정의 투명 컨트롤을 가질 수 있지만 기본 패널은 사용할 수 없습니다.