在不拉伸的情况下在 wxBoxSizer 的整个方向上分布和居中项目

Distribute and centre items over wxBoxSizer's full orientation without stretching

我刚开始学习 sizer,对如何实现它有点困惑。

如果我在框架中有一个水平框大小调整器并向其添加两个按钮(每个按钮的比例为“1”),那么它们都会拉伸以占据大小调整器的整个水平宽度(等于整个框架的水平宽度)并均匀分布(参见下面的示例 1)。

示例 1 代码:

wxFrame* frame = new wxFrame(nullptr, wxID_ANY, "Frame");
wxPanel* panel = new wxPanel(frame, wxID_ANY);

wxBoxSizer* buttonSizer = new wxBoxSizer(wxHORIZONTAL);

wxButton* buttonOk = new wxButton(panel, wxID_OK, "Ok");
wxButton* buttonCancel = new wxButton(panel, wxID_CANCEL, "Cancel");

buttonSizer->Add(buttonOk, 1, wxALL, 10);
buttonSizer->Add(buttonCancel, 1, wxALL, 10);

panel->SetSizerAndFit(buttonSizer);
frame->Show();

但是,如果我希望这些按钮保持它们的原始大小(不被拉伸),但仍然均匀分布在框架中,而且仍然在每个 wxSizerItem 内水平居中怎么办? IE。以便水平尺寸调整器的两个“列”占据对话框的一半,并且每个按钮都在这些列的每一列中居中?我将如何做到这一点?这是一张图。按钮应该是它们的默认大小。

______________________________________
|    | Button 1 |    | Button 3 |    |
--------------------------------------

以下代码不起作用:

buttonSizer->Add(buttonOk, 0, wxALL, 10);
buttonSizer->Add(buttonCancel, 0, wxALL, 10);

一种方法是使用拉伸垫片:

buttonSizer->AddStretchSpacer();
buttonSizer->Add(buttonOk, 0, wxALL, 10);
buttonSizer->AddStretchSpacer();
buttonSizer->Add(buttonCancel, 0, wxALL, 10);
buttonSizer->AddStretchSpacer();