c++ - wxFrame 中的透明 wxPanel 成员

标签 c++ wxwidgets

我有一个从 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/

相关文章:

c++ - 目标需要语言方言 "CXX17"(带有编译器扩展),但 CMake 不知道用于启用它的编译标志

c++ - 属性说明符序列是否继承?

c++ - Unordered_map<string, int> 有效但 Unordered_map<string, string> 无效

c++ - 如何在不破坏非事件选择颜色的情况下更改 wxTextCtrl 的背景颜色?

c++ - 为什么 operator= 不适用于具有新模板放置的标准类型?

c++ - std::vector 到带有自定义分隔符的字符串

c - 我的程序阻止 Windows 关闭!

linux - BadAlloc 并在 wxWidgets 程序中崩溃。如何找到错误?

python - wxPython "Library not loaded"

c++ - 使用 wxWidgets 绘制视频流