Заполнить цветом можно любую замкнутую фигуру (рис. 13.9). Прямоугольники просто весьма удобны для этого.
12.7.8. Текст
В заключение укажем, что ни одна система, рисующая графические изображения, не может считаться полной, если она не способна выводить текст простым способом — вырисовывание каждого символа с помощью набора линий в расчет не принимается. Мы приписываем окну метку, оси также могут иметь метки, но помимо этого мы можем вывести текст в любое место окна, используя объект класса
Text
.
Text t(Point(150,150), "Hello, graphical world!");
win.attach(t);
win.set_label("Canvas #8");
win.wait_for_button;
Из
элементарных графических элементов, показанных в этом окне, можно создать сколь угодно сложные и утонченные фигуры. Пока мы просто отметим особенность кода в этой главе: они не содержат циклов, условных конструкций, а все данные в них встроены. Выходная информация скомпонована из примитивов простейшим образом. Как только мы начнем составлять из этих примитивов сложные фигуры с помощью данных и алгоритмов, все станет намного интереснее.
Мы видели, как можно управлять цветом текста: метка оси (см. раздел 12.7.3) просто представляет собой объект класса
Text
. Кроме того, мы можем выбирать шрифт и размер символов.
— это фотография двух самолетов, преодолевающих звуковой барьер.
Эта фотография относительно велика и размещается поверх нашего текста и фигур. Итак, рисунок требуется немного улучшить. Для этого мы немного сдвинем фотографию.
ii.move(100,200);
win.set_label("Canvas #11");
win.wait_for_button;
Обратите внимание на то, что части фотографии, не попавшие в окно, не представлены на экране, поскольку то, что выходит за его пределы, обрезается.
Можете ли вы догадаться, что делает этот фрагмент?
Между кодом и тем, что появляется на экране, существует прямая связь. Даже если вам пока непонятно, как этот код приводит к таким результатам, то вскоре все станет ясно. Обратите внимание на то, что для форматирования текстовых объектов, содержащих информацию о размерах, мы использовали поток
istringstream
(см. раздел 11.4).
12.8. Запуск программы
Мы показали, как можно создать окно и нарисовать в нем разные фигуры. В следующих главах мы покажем, как определен класс
Shape
и его подклассы, а также как их использовать.
Для того чтобы выполнить эту программу, требуется больше, чем для других программ, описанных ранее. Помимо кода в функции
main
, нам необходимо скомпилировать код интерфейсной библиотеки и связать его с нашей программой, но даже в этом случае программа не будет работать, пока на компьютере не будет установлена библиотека FLTK (или другая система графического пользовательского интерфейса).
Итак, можно сказать, что наша программа состоит из четырех частей.
• Код нашей программы (
main
и т.д.).
• Наша интерфейсная библиотека (
Window
,
Shape
,
Polygon
и т.д.).
• Библиотека FLTK.
• Стандартная библиотека языка C++.
Кроме того, мы неявно используем операционную систему. Оставляя в стороне операционную систему и стандартную библиотеку, мы можем проиллюстрировать организацию графической программы следующим образом.
Как заставить эту программу работать, объясняется в приложении Г.
12.8.1. Исходные файлы
Наша библиотека графики и графического пользовательского интерфейса состоит лишь из пяти заголовочных и трех исходных файлов.