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