wxWidgets Sizers:如何让sizer在调整大小时正常运行

时间:2014-08-06 16:53:49

标签: c++ user-interface wxwidgets

我目前正在学习在Microsoft Visual Studio C ++中使用wxWidgets,我认为我的头脑中包含了Sizer的概念。但是,我似乎无法让他们在调整大小时表现出我想要的样子。我正在学习一个教程(我似乎错位的链接,但它非常简单),其目的是创建一个带有可扩展文本框的对话窗口,其下方有两个按钮,它们应保持大致居中。我的窗口代码如下,在我的对话框窗口的构造函数中找到:

vertSizer = new wxBoxSizer(wxVERTICAL); // Create vertical (parent) sizer, will contain text box and child sizer
vertSizer->Add(
    new wxTextCtrl(this, -1, "My text", wxDefaultPosition, wxSize(100,80), wxTE_MULTILINE),
    1, // vertically stretchable
    wxEXPAND | wxALL, // horizontally stretchable, borders all around
    10); // Add text box to parent sizer

horizSizer = new wxBoxSizer(wxHORIZONTAL); // Make child sizer, will contain buttons
wxSizerFlags ButtonFlags(1); // Make controls stretch hoizontally (to cover entire sizer area)
ButtonFlags.Expand().Center().Border(wxALL,10); // Make controls expand vertically, add border
horizSizer->Add(new wxButton(this,wxID_OK,"OK"), ButtonFlags); // Add first button
horizSizer->Add(new wxButton(this, ID_Cancel,"Cancel"), ButtonFlags); // Add second button

vertSizer->Add(horizSizer); // Add child sizer to parent sizer
SetSizerAndFit(vertSizer);

显示的窗口看起来正确(窗口顶部有一个大文本框,两个正确间隔的按钮,并排在它下面)。但是,调整窗口大小时,文本框会垂直和水平扩展(预期行为),但按钮保持原位,左对齐(不需要的行为)。 (我为无法发布图片而道歉;我有一对准备,但我不能以我的名声发布它们。)

初始化时的格式很棒,但是我会在调整大小时保持格式化。意思是,我希望文本框下面的两个按钮保持在窗口的中间,仍然是并排的(尽管它们之间的距离随着窗口变大而增加是可以接受的)。或者,我希望按钮的大小水平增加,这样每个按钮占据文本框下方一半的区域。

如果已经提出过类似的问题我很抱歉,但在我的研究中我没有在这个网站上找到满意的答案。

对此的任何帮助将不胜感激。谢谢!

1 个答案:

答案 0 :(得分:2)

你需要告诉外盒sizer它应该扩展水平子sizer:

vertSizer->Add(horizSizer, 0, wxEXPAND);

第二个参数0告诉垂直分级器仅水平扩展子分级器。对于box sizer,将0作为第二个参数并将wxEXPAND作为第三个参数(部分)将确保添加的子控件或sizer在"其他"中扩展。方向,即对于垂直尺寸确定器,儿童水平扩展,而对于水平尺寸确定器,儿童垂直扩展。

如您在文本框中所知,将第1个参数作为第二个参数传递将向两个方向展开。