1

我是wxWidgets和的新手DialogBlocks。我有一个使用 DialogBlocks 创建并保存为 XRC 文件的表单。表单的一部分有一个垂直方向wxStaticBoxSizer,其中放置了两个wxScrolledWindow元素。我想根据要向用户显示的数据一次只显示一个,因此我将一个标记为隐藏,而将另一个标记为可见。当我尝试切换显示并显示隐藏在 XRC 中的小部件并隐藏未隐藏的小部件时,我隐藏的小部件消失得很好,但我想要显示的小部件不可见。但是,如果我调整窗口大小,它会出现。一旦它出现,我就可以毫无问题地来回切换。我尝试了许多显示、启用、无效、获取大小和调用的组合RecalcSizes、刷新、布局等。我也尝试了不同的组合。简单地调用Show将允许我在两者之间切换,但只有在我切换到最初不显示的那个并调整窗口大小之后。从我在文档中看到的。问题是它wxSizer没有为隐藏窗口分配空间,但是可以设置一个标志来覆盖该行为。我的问题是 DialogBlocks 没有公开该功能,因此如果我手动编辑 XRC 文件,当我或其他开发人员之一保存一些更改时,修改将丢失。我可以进行一系列调用来告诉 sizer 分配空间吗?默认OnResize处理程序会执行某些操作以使 sizer 分配空间,但我不知道那是什么,也不知道该怎么做。

这是我在文档中找到的标志:

wxRESERVE_SPACE_EVEN_IF_HIDDEN 通常 wxSizer 不会为隐藏窗口或其他项目分配空间。此标志覆盖此行为,以便为窗口分配足够的空间,即使它不可见。例如,这使得动态显示和隐藏控件成为可能,而无需调整父对话框的大小。此功能是 wxWidgets 2.8.8 版本以来的新功能

4

1 回答 1

0

不幸的是,DialogBlocks 确实不允许您指定此标志。没有它,您需要Layout()在显示以前隐藏的控件后调用。这将起作用,前提是您在具有足够空间的父级上调用它以容纳现在需要更多空间的子级(例如,在顶级父级上调用它总是有效),但会导致控件明显转移,这可能不是您所需要的想。

于 2012-10-25T22:55:48.880 回答