【问题标题】:wxWidgets: Show a window that was marked hidden in the XRCwxWidgets:显示在 XRC 中标记为隐藏的窗口
【发布时间】:2012-10-25 16:14:07
【问题描述】:

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

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

wxRESERVE_SPACE_EVEN_IF_HIDDEN 通常 wxSizers 不分配空间 用于隐藏的窗户或其他物品。此标志覆盖此行为 以便为窗口分配足够的空间,即使它不是 可见的。这使得动态显示和隐藏控件成为可能 例如,无需调整父对话框的大小。这个功能是新的 从 wxWidgets 2.8.8 版开始

【问题讨论】:

    标签: c++ wxwidgets xrc


    【解决方案1】:

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

    【讨论】:

    • 啊,我曾尝试在 wxScrolledWindow 上调用Layout(),但没有成功,但我从未尝试在父级上调用它:GetParent()->Layout(),效果很好。谢谢。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-05-25
    相关资源
    最近更新 更多