t.set_font(Font::times_bold);
t.set_font_size(20);
win.set_label("Canvas #9");
win.wait_for_button();
Здесь мы увеличили буквы в строке "Hello, graphical world!
12.7.9. Изображения
Мы можем также загружать изображения из файлов.
Image ii(Point(100,50),"image.jpg"); // файл 400×212 пикселей
// в формате jpg
win.attach(ii);
win.set_label("Canvas #10");
win.wait_for_button();
Файл image.jpg
Эта фотография относительно велика и размещается поверх нашего текста и фигур. Итак, рисунок требуется немного улучшить. Для этого мы немного сдвинем фотографию.
ii.move(100,200);
win.set_label("Canvas #11");
win.wait_for_button();
Обратите внимание на то, что части фотографии, не попавшие в окно, не представлены на экране, поскольку то, что выходит за его пределы, обрезается.
12.7.10. И многое другое
Приведем без объяснений еще один фрагмент кода
Circle c(Point(100,200),50);
Ellipse e(Point(100,200), 75,25);
e.set_color(Color::dark_red);
Mark m(Point(100,200),'x');
ostringstream oss;
oss << "screen size: " << x_max() << "*" << y_max()
<< "; window size: " << win.x_max() << "*" << win.y_max();
Text sizes(Point(100,20),oss.str());
Image cal(Point(225,225),"snow_cpp.gif"); // 320×240 пикселей,
// формат gif
cal.set_mask(Point(40,40),200,150); // отобразить рисунок
// в центре
win.attach(c);
win.attach(m);
win.attach(e);
win.attach(sizes);
win.attach(cal);
win.set_label("Canvas #12");
win.wait_for_button();
Можете ли вы догадаться, что делает этот фрагмент?
istringstream
12.8. Запуск программы
Мы показали, как можно создать окно и нарисовать в нем разные фигуры. В следующих главах мы покажем, как определен класс Shape
Для того чтобы выполнить эту программу, требуется больше, чем для других программ, описанных ранее. Помимо кода в функции main()
Итак, можно сказать, что наша программа состоит из четырех частей.
• Код нашей программы (main()
• Наша интерфейсная библиотека (Window
Shape
, Polygon
и т.д.).• Библиотека FLTK.
• Стандартная библиотека языка C++.
Кроме того, мы неявно используем операционную систему. Оставляя в стороне операционную систему и стандартную библиотеку, мы можем проиллюстрировать организацию графической программы следующим образом.
Как заставить эту программу работать, объясняется в приложении Г.
12.8.1. Исходные файлы
Наша библиотека графики и графического пользовательского интерфейса состоит лишь из пяти заголовочных и трех исходных файлов.
•Заголовки
•Point.h
•Window.h
•Simple_window.h
•Graph.h
•GUI.h
•Исходные файлы
•Window.cpp
•Graph.cpp
•GUI.cpp
До главы 16 мы можем игнорировать файлы графического пользовательского интерфейса.
Задание
Это задание напоминает программу “Привет, мир!”. Его цель — ознакомить вас с простейшими графическими средствами.
1. Напишите программу, создающую пустой объект класса Simple_window
Graph.h
, Window.h
, GUI.h
и Simple_Window.h
в ваш код, а также включить в проект файлы Graph.cpp
и Window.cpp
.2. Добавьте примеры из раздела 12.7 один за другим, сравнивая их друг с другом.