wxLua - 在更改wxStaticText控件中的文本时需要动态重排

时间:2012-09-10 18:31:06

标签: lua wxwidgets wxlua

我有一个静态文本控件,可根据用户操作更改内容。它是一个水平的sizer与其他几个控件。当文本改变时,控件会动态更新其大小,但它不会动态调整它在sizer中的位置,即它与兄弟控件重叠,直到我手动调整主窗口大小,之后它再次看起来很好。

static text control overlapping a button

如何让sizer自动重新调整以适应各种因素?

2 个答案:

答案 0 :(得分:2)

最简单的方法是在Layout()返回的顶级窗口父级上调用wxGetTopLevelParent()。这不是最有效的方法,因为它可能导致重新布局太多,您可以始终将布局限制为最深的sizer或窗口,其中包含更改大小的窗口,其大小需要更新,但是,再次执行此操作在TLW级别是最简单的方法。

答案 1 :(得分:1)

好的,Stackoverflow向我指出了包含我答案的其他一些问题。我需要在sizer上调用Layout()。但事情并非那么简单。我正在使用一个xrc文件用于GUI,并且不知道如何获得sizer的句柄。直到我知道我可以在控件上调用GetContainingSizer()。

但事情并非那么简单。

作为wxWidgets的新手,并尝试了许多不同的方法来解决这个问题,我在自己的sizer中使用了静态文本控件,在sizer中使用了相邻的按钮,并在水平框sizer中使用了所有这些sizer。

摆脱这些额外的sizer并控制所有兄弟姐妹的一个水平。 box sizer工作......差不多!但事情并不那么简单。

兄弟控制正在流动,但是包含的sizer没有保持在其区域的中心,即控件偏离右侧中心。所以我不得不去下一个包含sizer的人。但是我无法在我确实拥有的sizer上调用GetContainingSizer(),所以我必须得到控制器,它是sizer的兄弟,然后调用GetContainingSizer()。只要我在那个 sizer上做了一个布局,那一切都有效!非常简单,真的。