我有一个从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);
}