Чтение онлайн

ЖАНРЫ

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

Заполнить цветом можно любую замкнутую фигуру (рис. 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
. Кроме того, мы можем выбирать шрифт и размер символов.

t.set_font(Font::times_bold);

t.set_font_size(20);

win.set_label("Canvas #9");

win.wait_for_button;

Здесь мы увеличили буквы в строке "

Hello, graphical world!
" до 20 пунктов и выбрали жирный шрифт Times.

12.7.9. Изображения

Мы можем также загружать изображения из файлов.

Image ii(Point(100,50),"image.jpg"); // файл 400x212 пикселей

// в формате 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"); // 320x240
пикселей,

// формат 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
(см. раздел 11.4).

12.8. Запуск программы

Мы показали, как можно создать окно и нарисовать в нем разные фигуры. В следующих главах мы покажем, как определен класс

Shape
и его подклассы, а также как их использовать.

Для того чтобы выполнить эту программу, требуется больше, чем для других программ, описанных ранее. Помимо кода в функции

main
, нам необходимо скомпилировать код интерфейсной библиотеки и связать его с нашей программой, но даже в этом случае программа не будет работать, пока на компьютере не будет установлена библиотека FLTK (или другая система графического пользовательского интерфейса).

Итак, можно сказать, что наша программа состоит из четырех частей.

• Код нашей программы (

main
и т.д.).

• Наша интерфейсная библиотека (

Window
,
Shape
,
Polygon
и т.д.).

• Библиотека FLTK.

• Стандартная библиотека языка C++.

Кроме того, мы неявно используем операционную систему. Оставляя в стороне операционную систему и стандартную библиотеку, мы можем проиллюстрировать организацию графической программы следующим образом.

Как заставить эту программу работать, объясняется в приложении Г.

12.8.1. Исходные файлы

Наша библиотека графики и графического пользовательского интерфейса состоит лишь из пяти заголовочных и трех исходных файлов.

•Заголовки

•Point.h

•Window.h

•Simple_window.h

•Graph.h

•GUI.h

•Исходные файлы

•Window.cpp

Поделиться с друзьями: