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?
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
Rufen Sie evt.Skip() in Ihrer TextLayer-Klasse auf, da Sie das Ereignis scheinbar direkt bei Ihrer OnPaint-Funktion anhalten. – macroland