2016-02-19 61 views
0

我的項目在主框架上有一個BoxSizer,BoxSizer隨後包含一個作爲Gride Sizer的Panel。 sizer按預期工作,直到窗戶的水平尺寸超出某個特定點,然後沒有任何東西會拉伸水平。當屏幕最大化時,間隙位於右側,但元素正確佔據垂直高度。WXWidgets 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); 
} 

當屏幕最大化時,它看起來像這樣。

[Boxs文本和元素] [間隙] [窗口的邊界]

[Boxs文本和元素] [間隙] [窗口的邊界]

[窗口的邊界]

我不想要差距,我希望盒子能夠進入窗戶的邊界。

回答

1

您必須同時使用非零(通常只有1)比例和wxEXPAND以及頂級box sizer,以使您的代碼按預期工作。爲網格sizer元素指定wxEXPAND足以使它們擴展到面板中可用的空間,但面板本身未配置爲展開以佔據框架中的所有空間,因此它不會。

但實際上在一個框架內有一個面板,您想要擴展以填充所有可用空間的情況非常普遍,因此對其有特別的支持:事實上,如果您不使用box sizer完全可以正常工作,因爲默認情況下,框架將調整其唯一的小孩以佔據其內部的所有空間。