Как сделать расширяемое окно или диалог в FLTK?

Мне нужно «расширяемое» окно/виджет. При нажатии кнопки в текущем окне появится другой виджет, который прикреплен к текущему окну, и его можно «свернуть» при повторном нажатии кнопки.

Это не всплывающее окно, которое можно свободно перемещать по отношению к главному окну. Я хочу, чтобы он был прикреплен к главному окну. У кого-нибудь есть идеи? Большое спасибо.

Я попытался сделать большое окно, состоящее из двух блоков, один из которых можно было показать или скрыть, но размер окна не меняется. Если изменить размер окна, то положение выглядит неправильным.


person user1635040    schedule 06.03.2014    source источник
comment
Пожалуйста, добавьте то, что вы пробовали, иначе мы не сможем помочь вам с вашей проблемой!   -  person jvperrin    schedule 06.03.2014


Ответы (2)


Вы смотрели на http://seriss.com/people/erco/fltk/ и тестовые программы, которые идут с дистрибутивом fltk?

В основном вам нужно установить один виджет с изменяемым размером для окна/диалога. Сделайте это группой, которую вы показываете/скрываете, когда нажимаете кнопку.

Если у вас есть дистрибутив FLTK, взгляните на программу test/resize.cxx в качестве примера того, как изменить размер на основе нажатия кнопки.

person cup    schedule 06.03.2014

Я не уверен, что понимаю, в чем именно заключается ваша проблема... Возможно, вам нужен виджет, который не всегда отображается в вашем главном Fl_Window. Затем нажатие другой кнопки делает его видимым и прикрепленным где-то в окне, в соответствии с размером окна... И когда вы изменяете размер окна, оно меняет свое положение, поэтому оно всегда находится, скажем, внизу справа от него. Если я правильно понял вашу проблему, то сделайте класс, myWindow или что-то еще, подклассом Fl_Window. И переопределить функцию изменения размера, которая вызывается при изменении размера окна.

class myWindow:public Fl_Window{
     Fl_Button *mySpecialWidget; //the movable widget (not allways a button ofc)
     public:
     myWindow(int x, int y, int w, int h, const char *L=NULL):
                                              Fl_Window(x,y,w,h,L){ 
        mySpecialWidget = new Fl_Button(.....);  //initialize subwidget here
        add(mySpecialWidget);                //add it as a subwidget of myWindow
        //may also include all the other needed widgets here...
     }
     void resize(int x, int y, int w, int h){
         //override this Fl_Window function, with
         //any extra functionality that you need
         //example, check window size-> set relevant position for mySpecialWidget
     }
}
person Frustrated Soul    schedule 06.04.2014