10

这是我拥有的小部件的层次结构:

Frame > wxBoxSizer > wxPanel > wxBoxSizer > wxFlexGridSizer(2 列,9 行),里面有各种表单域和按钮。

第一个 BoxSizer 是放置面板,第二个是围绕 FlexGrid 做一个边框。

一切看起来都不错,如果窗口放大,框架可以正常展开,但它也可以调整到几乎没有,隐藏所有表单元素。

如何将窗口的最小尺寸强制为默认情况下 FlexGridSizer 建议的尺寸(所有表单元素都可见并具有最小的可能尺寸)?

4

4 回答 4

18

可能为时已晚,但这里给出的答案是不必要的复杂,您只需要调用SetSizerAndFit(sizer)将 sizer 与框架相关联,设置其初始大小并将此大小设置为最小可接受大小。

于 2010-02-12T22:02:02.573 回答
6

使用 Frame 上的 SetMinSize() 方法设置最小尺寸将对框架的最小区域设置限制(刚刚测试过)。一旦设置,wxWidgets 将不允许框架的大小小于指定的值。

我会这样设置值。在构造函数中,设置框架的所有元素。最后,在您调用该Layout()方法设置所有尺寸器等之后,调用该GetSize(int *w, int *h)方法以在默认布局下获取框架的 x 和 y 大小。使用这些值调用该SetMinSize()方法以将该默认大小设置为您的 Frame 的最小值。这将考虑到所有不同的填充和边框,以及由框架和包含的元素设置的这些。

于 2009-03-05T18:30:33.367 回答
2

在 wxPerl 中,dagorym的答案可以简洁地写成 $self->SetMinSize($self->GetSize());调用Layout().

于 2009-03-10T07:29:14.007 回答
1

我会尝试使用wxFlexGridSizer->GetMinSize()返回的任何内容调用wxFrame->SetMinSize(wxSize),应该可以工作,但未经测试。您需要注意 GetMinSize 所说的关于转换为窗口大小的内容,然后才能通过我期望的。

于 2009-03-04T20:48:13.950 回答