2016-08-01 86 views
0

我試圖通過從駕駛和繪製文本自己如下創建一個自定義透明wxTextCtrlwxWidgets的透明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

在TextLayer類中調用evt.Skip(),因爲它似乎是在OnPaint函數中停止事件。 – macroland

回答

1

對不起,但你不能使本機控制透明。您可以使用wxGTK自定義透明控件(請參閱「擦除」示例),但不能使用本地透明控件。