我想使用wxWidgets制作一个包含一些按钮和面板的布局。问题是我无法在其他框架的中心创建可扩展的wxSizer。
我尝试使用某些wxWidgets组件,例如wxBoxSizer,wxFlexGridSizer等。实施此布局是否有好的建议?
答案 0 :(得分:3)
您需要将其视为多个嵌套块。
wxBoxSizer
。wxBoxSizer
垂直方向。proportion
参数。这是一个代码片段示例:
wxBoxSizer* rootsizer = new wxBoxSizer(wxHORIZONTAL);
//TODO: the right side control is whatever you need it to be
wxPanel* rightPanel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, rightPanelSize);
//NOTE the use of 0 as the proportion; this means the right panel will NOT expand
//horizontally; it is fixed in size. The wxEXPAND flag means it will expand vertically
//to fill
rootsizer->Add(rightpanel, 0, wxEXPAND, 0);
//Our center sizer to contain our center controls
wxBoxSizer* centersizer = new wxBoxSizer(wxVERTICAL);
//NOTE the use of 1 as the proportion; this means the center panel will expand HORIZONTALLY to fill all available space
rootsizer->Add(centersizer, 1, wxEXPAND, 0);
//TODO: whatever control goes on the left
wxPanel* leftpanel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, leftPanelSize);
//Proportion is again 0 to prevent expanding horizontally
rootsizer->Add(leftpanel, 0, wxEXPAND, 0);
//Now the second level
//TODO: whatever control goes on the top
wxPanel* toppanel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, topPanelSize);
//Proportion is 0 to prevent expanding VERTICALLY (because we are now in the center sizer
//which is a vertical sizer
centersizer->Add(toppanel, 0, wxEXPAND, 0);
//Our final depth, the centermost control, is set to a proportion of 1 to fill the space
//vertically
//TODO: whatever is your center control
wxPanel* centerpanel = new wxPanel(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize);
centersizer->Add(centerpanel, 1, wxEXPAND, 0);
//And then the bottom control at proportion 0
wxPanel* bottompanel= new wxPanel(parent, wxID_ANY, wxDefaultPosition, bottomPanelSize);
centersizer->Add(bottompanel, 0, wxEXPAND, 0);
通过结合使用多个级别的大小调整器以及wxEXPAND
并正确分配proportion
,您可以获得适当的灵活性。您只需要学习按照仅在一个方向上扩展和收缩的控件组的方式来查看它即可。