FLTK 组最小大小

FLTK Group minimum size

使用 FLTK(版本 1.4.0),是否可以为 Fl_Group 小部件设置最小尺寸?明确地或自动地调整大小以使其不会小于显示所有子项所需的大小? Fl_Window class 有方法 size_range 允许设置最小 window 大小,但是 Fl_Group 没有这样的方法。

如果这不可用,那么也许有一些其他方法可以强制限制非 window 组小部件的大小?

可以通过使用最顶层 window 的 size_range 方法来部分实现这一点,但是如果我们使用 Fl_Tile 则每个图块都不会受到任何限制方法。是的,Fl_Tile 内的 Fl_Box 小部件可以限制 外部 方块的最小尺寸,但这并不是我在这里需要的。

您可以覆盖 Fl_Group 小部件的调整大小方法。即使未显式调用,调整大小时也会自动触发调整大小方法。

#include <FL/Enumerations.H>
#include <FL/Fl_Double_Window.H>
#include <FL/Fl_Group.H>
#include <FL/Fl.H>

struct MyGroup : public Fl_Group {
    MyGroup(int x, int y, int w, int h, const char *label = 0): Fl_Group(x, y, w, h, label) {
        box(FL_ENGRAVED_FRAME);
    }
    virtual void resize(int x, int y, int w, int h) override {
        Fl_Group::resize(x, y, w, h);
        if (w < 300 || h < 200) {
            resize(x, y, 300, 200);
        }
        
    }
};

int main() {
    Fl_Double_Window w(400, 300);
    MyGroup g(20, 20, 360, 260);
    w.end();
    w.resizable(&w);
    w.show();
    return Fl::run();
}

您会注意到 window 是可以调整大小的,如果您尝试减小它的大小,群组小部件只会缩小到某个点。