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 类中的默认窗口大小设置有误导致的,建议进行如下尝试:
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));
}
如果存在以上代码,则将默认窗口大小的设置注释掉或删除该行代码,并重新编译运行程序测试。
如果以上方法仍无法解决问题,建议对程序进行调试,确定窗口大小设置的具体位置,以便更好地进行排查。