首页/ 编程语言 ubuntu用codeblocks编译wxwidget项目在Windows编译运行后出现问题,如何解决?

ubuntu用codeblocks编译wxwidget项目,在Linux系统下运行正常,在Windows下编译运行后wxPopupTransientWindow窗口显示大小为默认的20x20,在自定义的listpopup.cpp文件里打出来的窗口尺寸正常,但在使用的listpopup的cpp文件里打出来的窗口尺寸就是20x20,不知道还有哪里出了问题,希望大家能为我解答,谢谢!
相关代码如下:

ListTransientPopup::ListTransientPopup(wxWindow *parent, wxColour bgcolor, bool scrolled, int n,
                                       const int IDs[], const wxString list[],
                                       wxBitmap* normal[], wxBitmap* down[], wxBitmap* hover[])
  :wxPopupTransientWindow(parent) {
   SetBackgroundColour(bgcolor);
   panel_ = new wxScrolledWindow(this, wxID_ANY);//设置滚动窗口
   panel_ -> SetBackgroundColour(bgcolor);
   top_sizer_ = new wxBoxSizer(wxHORIZONTAL);
   wxBoxSizer *vSizer = new wxBoxSizer(wxVERTICAL);
   for (int i = 0; i < n; i++)//为菜单栏的滚动窗口添加按键元素
   {
      ui_element *p_element = new ui_element();
      p_element->id_ = IDs[i];
      p_element->p_bitmap_text_ = new wxCustomButton( panel_, p_element->id_, list[i], wxSize(120, 40), wxDefaultPosition);
      p_element->p_bitmap_text_ -> normal_bitmap(normal[i])-> down_bitmap(down[i])-> hover_bitmap(hover[i]);
      p_element->p_bitmap_text_ -> disable_bitmap(disable);
      p_element->p_bitmap_text_ -> pre_bg(prebg) -> hover_bg(hoverbg);
      elements_.push_back(p_element);
      vSizer->Add(p_element->p_bitmap_text_, 0, wxEXPAND | wxALL, 0);
   }
   top_sizer_->Add(vSizer, 0, wxALIGN_CENTER_VERTICAL | wxALL, 0);
   if (scrolled)
   {
      panel_->SetScrollRate(10, 10);//设置滚动增量
   }
   else
   {
      top_sizer_->Fit(panel_);
   }
   panel_->SetSizer(top_sizer_);
   int x = panel_->GetSize().GetWidth();
   int y = panel_->GetSize().GetHeight();
   cout << "p.x:" << x <

void wxCustomMenu::OnSetMenu(wxMouseEvent& event) {
     delete setting_menu_popup_;
     int popup_IDs[] = {
       ID_SETSNAPPATH,
       ID_ABOUT
     };
     wxString popup_Strings[] = {
       "" + _("Folder"),
       "" + _("About")
     };
     wxBitmap* popup_normal[] = {
       more1,
       folder1
     };
     wxBitmap* popup_down[] = {
       more2,
       folder2
     };
     wxBitmap* popup_hover[] = {
       more1,
       folder1
     };
     wxWindow *btn = (wxWindow*)event.GetEventObject();
     wxPoint pos = btn->ClientToScreen(wxPoint(0, 0));
     wxSize sz = btn->GetSize();
     sz.x = 0;
     setting_menu_popup_ = new ListTransientPopup(this, "GREY", false, 2, popup_IDs, popup_Strings,
                                                  popup_normal, popup_down, popup_hover);
     setting_menu_popup_->Position(pos,sz);
     cout << "sz.x:" << sz.x  <"sz.y:" << sz.y  <//打出来的值是0,40
     setting_menu_popup_->Popup();
     int x = setting_menu_popup_->GetSize().GetWidth();
     int y = setting_menu_popup_->GetSize().GetHeight();
     cout << "sz.x:" << x <"sz.y:" << y <//打出来的值是20,20
}

根据您提供的代码,有可能是 ListTransientPopup 类中的默认窗口大小设置有误导致的,建议进行如下尝试:

  1. 在 ListTransientPopup 类定义中查找是否存在对默认大小的设置,如下:
ListTransientPopup::ListTransientPopup(wxWindow *parent, wxColour bgcolor, bool scrolled, int n,
                                           const int IDs[], const wxString list[],
                                           wxBitmap* normal[], wxBitmap* down[], wxBitmap* hover[])
      :wxPopupTransientWindow(parent) {
      ...
      // 可能存在的默认窗口大小设置
      SetSize(wxSize(20, 20));
}

如果存在以上代码,则将默认窗口大小的设置注释掉或删除该行代码,并重新编译运行程序测试。

  1. 如果以上代码不存在,则可能是因为在 Windows 系统下使用了不同版本的 wxWidgets 库导致的,可以尝试重新编译 wxWidgets 库并在 Windows 系统下测试。可以参考 wxWidgets 官网提供的编译指南来编译适合您系统的 wxWidgets 库。同时也需要确认在代码中引用的 wxWidgets 库是正确的。

如果以上方法仍无法解决问题,建议对程序进行调试,确定窗口大小设置的具体位置,以便更好地进行排查。