wxFrame中的透明wxPanel成员

时间:2015-11-09 14:11:57

标签: c++ wxwidgets

我有一个源自wxFrame的MainFrame。该框架具有自定义类的面板成员m_panel,派生自wxPanel

我重载了MainFrame的OnPaint()函数来设置背景图片。

从背景图片中我只看到一个5像素的边框。其余的被wxPanel阻止。由于某种原因,我不能使面板透明。我尝试了m_panel->Hide(),它完全没有效果m_panel->SetBackgroundStyle(wxBG_STYLE_CUSTOM)。后者有奇怪的效果,我可以看到桌面(但背景图像仍然可以在5px边框中看到)。

我确实在wxTRANSPARENT_WINDOW的构造函数中添加了wxPanel样式。

如何设置此面板并使其透明?

1 个答案:

答案 0 :(得分:1)

使用自定义wxPanel覆盖OnPaint以获取图纸。然后将其用作wxFrame的主面板。示例如下所示:

class BackgroundPanel: public wxPanel
{
public:
    BackgroundPanel(wxFrame* parent);    
    void OnPaint(wxPaintEvent & evt);

private:
    wxBitmap    backgroundBitmap;

    DECLARE_EVENT_TABLE()
};


BackgroundPanel::BackgroundPanel(wxFrame* parent)
:wxPanel(parent)
{
    //Set backgroundBitmap
}


void BackgroundPanel::OnPaint(wxPaintEvent& evt)
{
    wxPaintDC dc(this);
    int height = GetClientRect().GetHeight() - backgroundBitmap.GetHeight();
    dc.DrawBitmap(backgroundBitmap,0,height,false);
}