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

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

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

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

如何获得此面板并使之透明?

最佳答案

有一个自定义的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);
}

10-08 11:37