【问题标题】:Why is my window resized to smaller than its minimum size by a wxBoxSizer为什么我的窗口被 wxBoxSizer 调整为小于其最小尺寸
【发布时间】:2021-02-18 04:31:11
【问题描述】:

我用

创建我的应用程序的主窗口
Main::Main() : wxFrame(nullptr, wxID_ANY, "Test", wxPoint(64, 64), wxSize(1024, 768))

在这个窗口中,我放置了另一个 View 类型的窗口,其构造函数如下所示:

View::View(wxWindow* parent) : wxHVScrolledWindow(parent, wxID_ANY, wxDefaultPosition, wxDefaultSize, wxFULL_REPAINT_ON_RESIZE)

视图在main的构造函数中通过m_view = new View(this);添加到main中

这给了我一个如下所示的应用程序:

这正是我所期望的。我需要在主窗口中添加更多控件,因此我想开始使用 sizer 让它们以独立于分辨率的方式布局。但是,如果我只是在我的视图周围添加这个简单的 sizer:

auto sizer = new wxBoxSizer(wxHORIZONTAL);
m_view = new View(this);
sizer->Add(m_view, 1, wxEXPAND);
SetSizerAndFit(sizer);

我最终得到了这个:

我曾希望我的视图会扩大并适合主窗口,但这种情况没有发生。我做错了什么?

我使用的是 wxWidgets 3.14 版。

【问题讨论】:

    标签: c++ wxwidgets


    【解决方案1】:

    只需调用SetSizer 而不是SetSizerAndFitdocumentation for SetSizerAndFit 是这样说的:

    此方法调用 SetSizer(),然后调用 wxSizer::SetSizeHints(),它将初始窗口大小设置为容纳所有 sizer 元素所需的大小,并将最小大小设置为相同大小

    但是,滚动窗口通常没有最小尺寸,因为如果当前尺寸低于给定尺寸,它只会显示滚动条。所以SetSizerAndFit 调用试图使窗口足够大以容纳没有最小尺寸的窗口,结果是一个只有标题栏、菜单和状态栏的窗口。

    或者,如果您的主框架只有 1 个 View 类型的子框架,您可以完全跳过 sizer。只有 1 个子对象且没有 sizer 的 wxFrame 对象会自动调整该 1 个子对象的大小以填充框架的客户区。

    【讨论】:

      猜你喜欢
      • 2018-05-29
      • 1970-01-01
      • 1970-01-01
      • 2012-12-28
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-05-30
      • 1970-01-01
      相关资源
      最近更新 更多