Программирование. Принципы и практика использования C++ Исправленное издание, стр. 214

Обратите внимание на то, что объект класса
WindowWidgetWindowWidgetWidgetWindowМы проявили небольшую неаккуратность, оставив открытыми данные-члены. Члены
ownpwprotectedОпределения класса
WidgetButtonMenuGUI.h16.4.2. Класс Button
Класс
ButtonWidgetclass Button:public Widget {public: Button(Point xy,int ww,int hh,const string& s,Callback cb) :Widget(xy,ww,hh,s,cb) { } void attach(Window& win);};Только и всего. Весь (относительно сложный) код библиотеки FLTK содержится в функции
attach()Widget
16.4.3. Классы In_box и Out_box
Для ввода и вывода текста в программе предусмотрены два класса, производных от класса
Widgetstruct In_box:Widget { In_box(Point xy,int w,int h,const string& s) :Widget(xy,w,h,s,0) { } int get_int(); string get_string(); void attach(Window& win);};struct Out_box:Widget { Out_box(Point xy, int w, int h, const string& s) :Widget(xy,w,h,s,0) { } void put(int); void put(const string&); void attach(Window& win);};Объект класса
In_boxget_string()get_int()get_string()string s = some_inbox.get_string();if (s =="") { // текст не введен}Объект класса
Out_boxIn_boxput()In_boxOut_box
get_floating_point()get_complex()stringstream16.4.4. Класс Menu
Определяем очень простое меню.
struct Menu:Widget { enum Kind { horizontal, vertical }; Menu(Point xy, int w, int h, Kind kk, const string& label); Vector_ref<Button> selection; Kind k; int offset; int attach(Button& b); // связывает кнопку с меню int attach(Button* p); // добавляет новую кнопку в меню void show() // показывает все кнопки { for (int i = 0; i<selection.size(); ++i) selection[i].show(); } void hide(); // hide all buttons void move(int dx, int dy); // перемещает все кнопки void attach(Window& win); // связывает все кнопки с объектом win