2016-08-01 2 views
0

Я пытаюсь создать пользовательский прозрачный wxTextCtrl вождения от него и рисования текста себя следующим образом:WxWidgets Прозрачный 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; 
    } 
} 

, но это не работает, это не прозрачны, как я должен сделайте это правильно?

+0

вам будет лучше создавать прозрачную панель, дать ей фокус, а затем поймать события EVT_KEY_DOWN/EVT_PAINT. Причина в том, что я не утончаю, вы можете переопределить собственную картину управления. – Igor

+0

вызовите evt.Skip() в вашем классе TextLayer, поскольку кажется, что вы останавливаете событие прямо в своей функции OnPaint. – macroland

ответ

1

Извините, но вы не сможете сделать собственный контроль прозрачным. У вас могут быть настраиваемые прозрачные элементы управления с помощью wxGTK (см. Образец «стереть»), но не с родными.

Смежные вопросы