如何在wxWidgets中设置最小窗口大小?

时间:2009-03-04 18:27:31

标签: user-interface cross-platform wxwidgets wxperl

这是我得到的小部件的层次结构:

框架> wxBoxSizer> wxPanel> wxBoxSizer> wxFlexGridSizer(2列,9行),里面有各种表单字段和按钮。

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

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

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

4 个答案:

答案 0 :(得分:13)

可能太晚了但是这里给出的答案是不必要的复杂,你只需要调用SetSizerAndFit(sizer)来将sizer与框架相关联,设置其初始尺寸并将此尺寸设置为最小可接受尺寸。 / p>

答案 1 :(得分:6)

使用Frame上的SetMinSize()方法设置最小大小将对帧的最小区域设置限制(仅测试它)。设置后,wxWidgets将不允许框架的大小小于指定的值。

我设置了这样的值。在构造函数中,设置框架的所有元素。最后,在调用Layout()方法设置所有sizer等之后,调用GetSize(int *w, int *h)方法以默认布局获取帧的x和y大小。使用这些值调用SetMinSize()方法将默认大小设置为Frame的最小值。这将考虑所有各种填充和边框以及框架和包含元素的设置。

答案 2 :(得分:2)

在wxPerl中,dagorym的答案可以简明扼要地写成 致电$self->SetMinSize($self->GetSize());Layout()

答案 3 :(得分:1)

我会尝试使用任何wxFrame->SetMinSize(wxSize)返回来调用wxFlexGridSizer->GetMinSize(),应该有效但未经过测试。您需要注意GetMinSize在传递窗口大小之前所说的内容,然后才能传递它。