【问题标题】:Transparent wxPanel member in wxFramewxFrame 中的透明 wxPanel 成员
【发布时间】:2015-11-09 14:11:56
【问题描述】:

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

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

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

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

我怎样才能拥有这个面板并使其透明?

【问题讨论】:

  • 为什么不在面板上作画?

标签: c++ wxwidgets


【解决方案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);
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2015-08-28
    • 2015-05-15
    • 1970-01-01
    • 2019-08-13
    • 1970-01-01
    • 1970-01-01
    • 2023-03-24
    相关资源
    最近更新 更多