我有一个从 wxFrame
派生的 MainFrame。该框架有一个自定义类的面板成员 m_panel
,派生自 wxPanel
。
我重载了 MainFrame 的 OnPaint()
函数来设置背景图像。
从背景图像中我只看到一个 5 像素的边框。其余部分由 wxPanel 阻止。由于某种原因,我无法使面板透明。我尝试了完全没有效果的 m_panel->Hide()
和 m_panel->SetBackgroundStyle(wxBG_STYLE_CUSTOM)
。后者有一种奇怪的效果,我可以看到桌面(但是背景图像在 5px 边框中仍然可见)。
我确实在 wxPanel
的构造函数中添加了 wxTRANSPARENT_WINDOW
样式。
我怎样才能拥有这个面板并使其透明?
最佳答案
有一个自定义的 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);
}
关于c++ - wxFrame 中的透明 wxPanel 成员,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33611026/