0

在我的主窗口中,我正在设置背景图像并使用 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, 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, 0, 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。

4

0 回答 0