我在一个项目中使用FLTK (Debian/SID1.3.2-6+b1发布的版本),我在初始化Fl_Scroll的内容滚动值时遇到了一些困难。
我创建了一个Fl_Double_Window,在右边使用Fl_Scroll创建了一个垂直面板,它位于左x 600和顶部y 24。
然后,我将Fl_Scroll的类型设置为Fl_Scroll::VERTICAL,并在其中放置一个Fl_Button,一切都很好。
问题?Fl_Scroll初始化已经用yposition() = 24 (Fl_Scroll的构造函数的X和Y)滚动了??应该是这样吗?),相反,我希望它使用在左侧和顶部0, 0上滚动的内容进行初始化,所以我在窗口的show()之前和之后的不同位置尝试了scroll_to(),在子类Fl_Scroll的FL_SHOW上(我实际上不需要子类Fl_Scroll,只需要尝试使scroll_to()工作),也可以在父draw()之后重写的draw()上,甚至在0,0,然后在600,24,但没有创建position()的位置创建Fl_Scroll。
让scroll_to()工作的唯一方法是在应用程序初始化(FL_KEYUP)之后从异步事件调用它。
下面是重写的Fl_Double_Window窗口构造函数:
group = new Fl_Group(0, 0, WIN_W, WIN_H);
{
menu = new Fl_Menu_Bar(0, 0, WIN_W, MENU_H);
menu->add("File/Quit", FL_CTRL+'q', cbMenuQuit_i);
glview = new CGLView(0, MENU_H, WIN_W-PROPS_W+1, WIN_H-MENU_H);
group->resizable(glview);
scroll = new CScroll(WIN_W-PROPS_W, MENU_H, PROPS_W-1, WIN_H-MENU_H);
scroll->type(Fl_Scroll::VERTICAL);
{
Fl_Pack *pack = new Fl_Pack(0, 0, PROPS_W-1, WIN_H-1);
{
btnAddLayer = new Fl_Button(0, 0, PROPS_W, 32, "@#+ Add Layer");
btnAddLayer->callback(btnAddLayerCb_i, (void *)this);
}
pack->end();
}
scroll->end();
}
group->end();
end();
size_range(WIN_MIN_W, WIN_MIN_H); /* Make the window resizable */
show();发布于 2015-01-20 12:11:30
算了,明白了,有两种调剂:
Fl_Scroll,然后在scroll->end()之后创建它Fl_Scroll,然后在scroll->end()使用负值scroll_to(-X, -Y)之后在这两种情况下,重要的是已经添加了包含的小部件(scroll_to()、alter、cases小部件)
我不清楚为什么使用Fl_Scroll构造函数的X和Y。
https://stackoverflow.com/questions/28043073
复制相似问题