2016-08-01 11 views
0

Ich versuche, eine benutzerdefinierte transparent wxTextCtrl durch Antreiben von ihm zu erstellen und zeichnen Sie den Text selbst wie folgt:WxWidgets Transparent wxTextCtrl

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; 
    } 
} 

aber es funktioniert nicht, es ist nicht transparent, wie ich soll mach es richtig?

+0

Sie werden besser eine Art von einem transparenten Panel erstellen, geben Sie ihm einen Fokus, und fangen Sie dann die Ereignisse EVT_KEY_DOWN/EVT_PAINT. Der Grund dafür ist - ich verdünne nicht, Sie können das native Kontrollmalen übersteuern. – Igor

+0

Rufen Sie evt.Skip() in Ihrer TextLayer-Klasse auf, da Sie das Ereignis scheinbar direkt bei Ihrer OnPaint-Funktion anhalten. – macroland

Antwort

1

Es tut uns leid, aber Sie können eine native Kontrolle nicht transparent machen. Sie können benutzerdefinierte transparente Steuerelemente mit wxGTK verwenden (siehe Beispiel "Löschen"), jedoch nicht die nativen Steuerelemente.