微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

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

如何解决如何在同一帧中替换背景图像和 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 举报,一经查实,本站将立刻删除。