WXWidgets Sizer在侧面留下间隙

时间:2016-02-19 20:33:09

标签: c++ wxwidgets

我的项目在主框架上有一个BoxSizer,然后BoxSizer包含一个Panel作为Gride Sizer。尺寸调整器按预期工作,直到窗户水平尺寸超出某一点,然后没有任何东西会伸展水平。当屏幕最大化时,间隙位于右侧,但元素正确占据整个垂直高度。

MyFrame::MyFrame(const wxString& title,const wxPoint& pos,const wxSize& size)
: wxFrame(NULL,wxID_ANY,title,pos,size){
   box=new wxBoxSizer(wxHORIZONTAL);
   panel=new wxPanel(this);
   grid=new wxGridSizer(14,7,3,3);
   //add all the elements to the grid, in this way
   grid->Add(new CustomButton("Text",panel),1,wxEXPAND);
   panel->SetSizer(grid);
   box->Add(panel);
   this->SetSizer(box);
}

当屏幕最大化时,它看起来像这样。

[方框文字和元素] [差距] [窗口边框]

[方框文字和元素] [差距] [窗口边框]

[窗户的寄宿生]

我不想要这个差距,我希望这些盒子能够躲到窗户的边缘。

1 个答案:

答案 0 :(得分:1)

您必须同时使用非零(通常只有1)比例和wxEXPAND与顶级box sizer一起使用,以使您的代码按预期工作。为grid sizer元素指定wxEXPAND足以使它们扩展到面板中可用的空间,但面板本身未配置为展开以占用框架中的所有空间,因此它不会。

但实际上,在框架内部有一个面板要扩展以填充所有可用空间的情况是如此常见,以至于有特殊的支持:实际上,如果你不使用{{1在sizer中,它已经可以正常工作了,因为默认情况下框架会调整其唯一的子节点以占用其中的所有空间。