我有一个静态文本控件,可以根据用户操作更改其内容。它位于带有其他几个控件的水平大小调整器中。当文本更改时,控件会动态更新其大小,但不会动态调整其在 sizer 中的位置,即,它会与兄弟控件重叠,直到我手动调整主窗口的大小,之后一切看起来都很好。
如何使尺寸仪自动重新调整以使一切都适合?
最简单的方法是调用Layout()
由wxGetTopLevelParent()
. 这不是最有效的方法,因为它可能导致重新布局过多,您始终可以将布局限制为最深的尺寸器或包含更改尺寸的窗口的窗口,其尺寸需要更新,但是,再次,这样做在 TLW 级别是最简单的方法。
好的,Stackoverflow 向我指出了包含我的答案的其他一些问题。我需要在 sizer 上调用 Layout()。但这并不是那么简单。我为 GUI 使用了一个 xrc 文件,但不知道如何获取 sizer 的句柄。直到我知道我可以在控件上调用 GetContainingSizer()。
但这并不是那么简单。
作为 wxWidgets 的新手,并尝试了许多不同的方法来解决这个问题,我将静态文本控件放在它自己的 sizer 中,将它的相邻按钮放在一个 sizer 中,并将所有这些 sizer 放在一个水平框 sizer 中。
摆脱这些额外的 sizer 并控制一个水平的所有兄弟姐妹。box sizer 工作...几乎!但这并不是那么简单。
同级控件流动正常,但包含的 sizer 没有保持在其区域的中心,即控件偏离中心到右侧。所以我不得不去下一个包含sizer。但是我无法在我拥有的 sizer 上调用 GetContainingSizer(),所以我必须获得作为 sizer 兄弟的控件,然后在其上调用 GetContainingSizer()。只要我在那个sizer上做了一个布局,一切都奏效了!很简单,真的。