如何在同一帧中替换背景图像和 wxBoxSizer?

问题描述

在我的主窗口中,我正在使用 CreateWidgets 中的 wxBoxSizer 设置背景图像并添加了几个按钮。现在点击其中一个按钮,它应该替换背景图像并隐藏旧的 wxBoxSizer 并创建一个新的。

设置新图像后,它总是调用子 OnPaint 函数而不是父 OnPaint 函数

MainFrame::MainFrame(const wxString& title)
: wxFrame(NULL,wxID_ANY,title)
{

    // set the frame icon
    SetIcon(wxICON(sample));
    wxString fileName = wxT("./images/image1.png");
    LoadBitmap(fileName);

    SetSize(size);

    CreateWidgets();
}

void MainFrame::LoadBitmaps(wxString filename) {

    
    if (!wxFile::Exists(filename))
        wxLogWarning("Can't find image files");

    wxImage::AddHandler(new wxPNGHandler);
    image.LoadFile(filename);

    size.SetHeight(image.GetHeight() + 60);
    size.SetWidth(image.GetWidth() + 25);
}

void MainFrame::OnPaint(wxPaintEvent& WXUNUSED(evt))
{
    wxPaintDC dc(this);
    wxBitmap bitmap(image);
    dc.DrawBitmap(bitmap,5,false);
}

void MainFrame::CreateWidgets() {

    wxBoxSizer *main_sizer = new wxBoxSizer(wxVERTICAL);
    wxBoxSizer *button_sizer = new wxBoxSizer(wxHORIZONTAL);

    std::vector<wxString> fileNames;
    fileNames.push_back(wxT("./images/img.png"));

    std::vector<wxString> rollover_files;
    rollover_files.push_back(wxT("./images/rollover_img.png"));

    std::vector<wxImage> images;
    wxImage image1(fileNames[0]);

    wxImage rollover_image1(rollover_files[0]);

    wxBitmap bitmap1(image1);

    wxBitmap rollover_bitmap1(rollover_image1);

    const long id = 6000;

    MWCustomBitmap *bitmapCtrl1 = new MWCustomBitmap(this,bitmap1,TetraMeshingBitMapBtn,rollover_bitmap1,NULL,wxDefaultPosition,wxDefaultSize);

    button_sizer->Add(bitmapCtrl1,wxALL,10);
    
    main_sizer->Addspacer(350);
    main_sizer->Add(button_sizer,wxSizerFlags().Center());
    this->SetSizer(main_sizer);
}

此处单击按钮 Loadfile(filename) 不起作用。

void MWCustomBitmap::OnBtnClicked(wxCommandEvent &evt) {
    wxString filename = wxT("./images/img3.png");
    if (!wxFile::Exists(filename))
        wxLogWarning("Can't find image files");

    wxImage::AddHandler(new wxPNGHandler);
    
    ((MainFrame*)(m_pParentwindow))->Getimage().LoadFile(filename);
}

PS:我正在学习 wxWidgets。

解决方法

暂无找到可以解决该程序问题的有效方法,小编努力寻找整理中!

如果你已经找到好的解决方法,欢迎将解决方案带上本链接一起发送给小编。

小编邮箱:dio#foxmail.com (将#修改为@)