FLTK 组最小规模

问题描述

使用 FLTK(1.4.0 版),是否可以为 Fl_Group 小部件设置最小尺寸?是显式还是自动,以便它不会调整到小于显示所有子项所需的大小? Fl_Window 类具有允许设置最小窗口大小的方法 size_range,但是 Fl_Group 没有这样的方法

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

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

解决方法

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

#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 h) override {
        Fl_Group::resize(x,h);
        if (w < 300 || h < 200) {
            resize(x,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();
}

您会注意到窗口可以调整大小,如果您尝试减小其大小,组小部件只会缩小到某个点。