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

на главную

Жанры

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

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

•Graph.cpp

•GUI.cpp

До главы 16 мы можем игнорировать файлы графического пользовательского интерфейса.

Задание

Это задание напоминает программу “Привет, мир!”. Его цель — ознакомить вас с простейшими графическими средствами.

1. Напишите программу, создающую пустой объект класса

Simple_window
размером 600x400 пикселей с меткой Мое окно, скомпилируйте ее, отредактируйте связи и выполните. Помните о том, что вы должны подключить библиотеку FLTK, описанную в приложении Г, вставить заголовочные файлы
Graph.h
,
Window.h
,
GUI.h
и
Simple_Window.h
в ваш код, а также включить в проект файлы
Graph.cpp
и
Window.cpp
.

2. Добавьте примеры из раздела 12.7 один за другим, сравнивая их друг с другом.

3. Выполните программу, внеся небольшие изменения (например, измените цвет, местоположение фигур или количество точек) в каждом из примеров.

Контрольные вопросы

1. Зачем нужна графика?

2. Почему нельзя обойтись без графики?

3. Чем графика интересна программисту?

4. Что такое окно?

5. В каком пространстве имен находятся наши классы графического интерфейса (наша графическая библиотека)?

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

7. Что представляет собой простейшее окно?

8. Что представляет собой минимальное окно?

9. Что такое метка окна?

10. Как задать метку окна?

11. Что собой представляют экранные, оконные и математические координаты?

12. Приведите примеры простых фигур, которые можно отобразить на экране.

13. Какие команды связывают фигуру с окном?

14. Какие основные фигуры можно использовать для того, чтобы нарисовать шестиугольник?

15. Как вывести текст в окне?

16. Как поместить в окне фотографию вашего лучшего друга или подруги? Напишите свою программу.

17. Представьте, что вы создали объект класса

Window
, но на экране ничего не появилось. Перечислите возможные причины.

18. Представьте, что вы создали объект класса

Shape
, но на экране ничего не появилось. Перечислите возможные причины.

Термины

Упражнения

Для выполнения приведенных ниже изображений рекомендуем использовать класс

Simple_window
.

1. Нарисуйте прямоугольник как объект класса

Rectangle
и как объект класса
Polygon
. Сделайте линии объекта класса
Polygon
красными, а линии объекта класса
Rectangle
синими.

2. Нарисуйте объект класса

Rectangle
с размерами 100x300 и поместите в него слово “Привет!”.

3. Нарисуйте ваши инициалы высотой 150 пикселей. Используйте толстую линию. Нарисуйте каждый инициал другим цветом.

4. Нарисуйте доску для игры в крестики-нолики размером 3x3, чередуя белые и красные квадраты.

5. Нарисуйте красную рамку шириной один дюйм вокруг прямоугольника, высота которого составляет три четверти высоты вашего экрана, а ширина — две трети ширины экрана.

6. Что произойдет, если вы нарисуете фигуру, которая не помещается в окне? Что произойдет, если вы нарисуете окно, которое не помещается на экране? Напишите две программы, иллюстрирующие эти эффекты.

7. Нарисуйте двумерный дом анфас, как это делают дети: дверь, два окна и крыша с дымовой трубой. Детали можете выбрать сами, можете даже нарисовать дымок из трубы.

Поделиться:
Популярные книги

Черный Маг Императора 13

Герда Александр
13. Черный маг императора
Фантастика:
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Черный Маг Императора 13

Последняя Арена 4

Греков Сергей
4. Последняя Арена
Фантастика:
рпг
постапокалипсис
5.00
рейтинг книги
Последняя Арена 4

Маяк надежды

Кас Маркус
5. Артефактор
Фантастика:
городское фэнтези
попаданцы
аниме
5.00
рейтинг книги
Маяк надежды

Великий перелом

Ланцов Михаил Алексеевич
2. Фрунзе
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Великий перелом

Сопротивляйся мне

Вечная Ольга
3. Порочная власть
Любовные романы:
современные любовные романы
эро литература
6.00
рейтинг книги
Сопротивляйся мне

Инквизитор Тьмы 2

Шмаков Алексей Семенович
2. Инквизитор Тьмы
Фантастика:
попаданцы
альтернативная история
аниме
5.00
рейтинг книги
Инквизитор Тьмы 2

Мастер Разума V

Кронос Александр
5. Мастер Разума
Фантастика:
городское фэнтези
попаданцы
5.00
рейтинг книги
Мастер Разума V

Бандит 2

Щепетнов Евгений Владимирович
2. Петр Синельников
Фантастика:
боевая фантастика
5.73
рейтинг книги
Бандит 2

Истребители. Трилогия

Поселягин Владимир Геннадьевич
Фантастика:
альтернативная история
7.30
рейтинг книги
Истребители. Трилогия

Гардемарин Ее Величества. Инкарнация

Уленгов Юрий
1. Гардемарин ее величества
Фантастика:
городское фэнтези
попаданцы
альтернативная история
аниме
фантастика: прочее
5.00
рейтинг книги
Гардемарин Ее Величества. Инкарнация

Падение Твердыни

Распопов Дмитрий Викторович
6. Венецианский купец
Фантастика:
попаданцы
альтернативная история
5.33
рейтинг книги
Падение Твердыни

"Дальние горизонты. Дух". Компиляция. Книги 1-25

Усманов Хайдарали
Собрание сочинений
Фантастика:
фэнтези
боевая фантастика
попаданцы
5.00
рейтинг книги
Дальние горизонты. Дух. Компиляция. Книги 1-25

Ох уж этот Мин Джин Хо 2

Кронос Александр
2. Мин Джин Хо
Фантастика:
попаданцы
5.00
рейтинг книги
Ох уж этот Мин Джин Хо 2

Энфис 6

Кронос Александр
6. Эрра
Фантастика:
героическая фантастика
рпг
аниме
5.00
рейтинг книги
Энфис 6