问题描述
使用 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();
}
您会注意到窗口可以调整大小,如果您尝试减小其大小,组小部件只会缩小到某个点。