2015-01-20 4 views
0

Я использую FLTK для проекта (версия, распространяемая с Debian/sid 1.3.2-6 + b1), и у меня возникли проблемы с инициализацией значений прокрутки контента Fl_Scroll.Начальные значения прокрутки Fl_Scroll

создать Fl_Double_Window и на правой стороне вертикальную панель с помощью Fl_Scroll, он расположен на левой х 600 и верхней у 24.

Затем я установил Fl_Scroll в Fl_Scroll::VERTICAL и разместил Fl_Button внутри, все работает нормально.

Проблема? Fl_Scroll Инициализация уже прокручивается с помощью xposition() = 600 and yposition() = 24 (X и Y конструктора Fl_Scroll? Предполагается, что это работает?), Вместо этого я хочу, чтобы он инициализировался с содержимым, прокручиваемым слева и сверху 0, 0, поэтому я пробовал scroll_to() в разных местах, до и после функция окна show(), на FL_SHOW в наследнике Fl_Scroll (я действительно не нужно подкласс Fl_Scroll, просто пытается получить scroll_to() работать), а также на переопределен draw() после родителя draw(), даже создавая Fl_Scroll 0, 0, то position() на 600, 24, но ничего.

Единственный способ, которым я получил 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(); 

ответ

0

Ничего, у него, два заселение вместо себя иного:

  • создать Fl_Scroll в 0, 0, то position() это после того, как scroll->end()
  • создать Fl_Scroll в желательно после scroll->end() использовать отрицательные значения scroll_to(-X, -Y)

В обоих случаях важно, что виджеты, содержащиеся уже добавлены (scroll_to() изменить cotained виджеты COORDS)

Не ясно, почему X и Y из Fl_Scroll «s конструктор используются.

+0

Посмотрите на test/scroll.cxx для примера того, как использовать Fl_Scroll с Fl_DoubleWindow. – cup

+0

Спасибо @cup, я не думал о примерах/тестах в источниках fltk, они не были включены в пакеты Debian fltk, загружены. Тем не менее, все примеры, которые я видел в Интернете, просто компенсируются в 0,0 или не заботятся о первоначальном прокрутке. Я подозреваю, что это ошибка, не вижу, как настройка относительного x, y для прокрутки может быть функцией, попробуйте прокрутку Fl_Scroll (50,50,5 * 75-50,300-50); 'с' test/scroll .cxx' – Alex

+0

x и y в конструкторе Fl_Scroll, как и все другие виджеты FLTK, предназначены для позиционирования виджета. Они не устанавливают положение курсора. Позиция также установит положение виджета. – cup

Смежные вопросы