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

на главную

Жанры

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

using namespace Graph_lib; // наши графические средства

// находятся в пространстве

// имен Graph_lib

Point tl(100,100); // задаем левый верхний угол экрана

Simple_window win(tl,600,400,"Canvas"); // создаем простое окно

Polygon poly; // создаем фигуру (многоугольник)

poly.add(Point(300,200)); // добавляем точку

poly.add(Point(350,100)); // добавляем другую
точку

poly.add(Point(400,200)); // добавляем третью точку

poly.set_color(Color::red); // уточняем свойства объекта poly

win.attach (poly); // связываем объект poly с окном

win.wait_for_button; // передаем управление драйверу

// дисплея

}

Запустив эту программу, мы увидим примерно такую картину.

Пройдемся по строкам программы и посмотрим, как она работает. Сначала подставляем в программу заголовочные файлы нашей библиотеки графического интерфейса.

#include "Simple_window.h" // открывает доступ к оконной библиотеке

#include "Graph.h" // открывает доступ к графической библиотеке

Затем в функции

main
мы сообщаем компьютеру, что средства нашей графической библиотеки находятся в пространстве имен
Graph_lib
.

Затем определяем точку, которую будем считать координатой левого верхнего угла нашего окна.

Point tl(100,100); // задаем координаты левого верхнего угла экрана

Затем создаем окно на экране.

Simple_window win(tl,600,400,"Canvas"); // создаем простое окно

Для этого мы используем класс

Simple_window
, представляющий окно в нашей библиотеке Graph_lib. Конкретный объект класса
Simple_window
носит имя
win
; иначе говоря,
win
— это переменная класса
Simple_window
. Список инициализации объекта win начинается с точки, которая будет использована в качестве левого верхнего угла
tl
, за ней следуют числа 600 и 400. Это ширина и высота окна соответственно, измеренные в пикселях. Мы объясним их смысл позднее, а пока лишь укажем, что они позволяют задать прямоугольник с заданными шириной и высотой. Строка
Canvas
используется для пометки окна. Если присмотритесь, то увидите слово
Canvas
в левом верхнем углу рамки окна.

Далее помещаем в окно некий объект.

Polygon poly; // создаем фигуру (многоугольник)

poly.add(Point(300,200)); // добавляем точку

poly.add(Point(350,100)); // добавляем другую точку

poly.add(Point(400,200)); // добавляем третью точку

Мы определяем многоугольник poly, а затем добавляем к нему точки. В нашей графической библиотеке объекты класса

Polygon
создаются пустыми, мы можем добавить в них любое количество точек, какое пожелаем. Поскольку мы добавили три точки, то получили треугольник. Точки представляют собой простые пары чисел, задающих горизонтальные и вертикальные координаты x и y в окне.

Для

того чтобы продемонстрировать такую возможность, мы сделали стороны многоугольника красными.

poly.set_color(Color::red); // уточняем свойства объекта poly

В заключение связываем объект

poly
с нашим окном
win
.

win.attach(poly); // связываем объект poly с окном

Легко заметить, что на экране пока не происходит вообще ничего. Мы создали окно (точнее, объект класса

Simple_window
) и многоугольник (с именем
poly
), окрасили многоугольник в красный цвет (
Color::red
) и связали его с окном
win
, но мы не дали команду отобразить это окно на экране. Это делает последняя строка в программе.

win.wait_for_button; // передаем управление драйверу дисплея

Для того чтобы система графического пользовательского интерфейса отображала объекты на экране, мы передали управление системе. Эту задачу выполняет функция

wait_for_button
, которая заставляет систему ждать, пока вы не щелкнете на кнопке Next в окне
Simple_window
.

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

Наше окно выглядит так.

Обратите внимание на то, что мы немного схитрили. А где же кнопка Next? Мы встроили ее в классе

Simple_window
. В главе 16 мы перейдем от класса
Simple_window
к обычному классу
Window
, в котором нет скрытых возможностей, и покажем, как написать свой собственный код, позволяющий управлять взаимодействием с окном.

В следующих трех главах мы будем просто использовать кнопку Next для перехода от одного дисплея к другому для отображения информации, связанной с разными этапами некоего процесса (“кадр за кадром”).

Вы настолько привыкли к тому, что вокруг каждого окна операционная система автоматически рисует рамку, что уже не замечаете ее. Рисунки в этой и следующих главах созданы с помощью системы Microsoft Windows, поэтому в правом верхнем углу каждого окна расположены три кнопки. Они могут быть полезными, если ваша программа зашла в тупик (а это в ходе отладки иногда случается), вы можете прекратить ее выполнение, щелкнув на кнопке со знаком x. Если вы запустите программу в другой операционной системе, рамка изменится. Наш вклад в оформление рамки заключается лишь в создании метки (в данном случае

Canvas
).

12.4. Использование библиотеки графического пользовательского интерфейса

В этой книге мы не используем непосредственно возможности графики и графического пользовательского интерфейса конкретных операционных систем. Это ограничило бы использование наших программ одной операционной системой и вынудило бы учитывать массу запутанных деталей. Как и для ввода-вывода текстов, чтобы упростить наши программы, мы будем использовать библиотеку, сглаживающую различия между операционными системами, устройствами ввода-вывода и т.д. К сожалению, язык С++ не имеет стандартной библиотеки графического пользовательского интерфейса, аналогично библиотеке стандартных потоков ввода-вывода, поэтому мы используем одну из многих доступных библиотек.

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

Корсар

Русич Антон
Вселенная EVE Online
Фантастика:
боевая фантастика
космическая фантастика
6.29
рейтинг книги
Корсар

Девяностые приближаются

Иванов Дмитрий
3. Девяностые
Фантастика:
попаданцы
альтернативная история
7.33
рейтинг книги
Девяностые приближаются

Жена фаворита королевы. Посмешище двора

Семина Дия
Фантастика:
фэнтези
5.00
рейтинг книги
Жена фаворита королевы. Посмешище двора

(не)Бальмануг. Дочь 2

Лашина Полина
8. Мир Десяти
Любовные романы:
любовно-фантастические романы
5.00
рейтинг книги
(не)Бальмануг. Дочь 2

Буря империи

Сай Ярослав
6. Медорфенов
Фантастика:
аниме
фэнтези
фантастика: прочее
эпическая фантастика
5.00
рейтинг книги
Буря империи

Идеальный мир для Лекаря 13

Сапфир Олег
13. Лекарь
Фантастика:
фэнтези
юмористическое фэнтези
аниме
5.00
рейтинг книги
Идеальный мир для Лекаря 13

Книга пятая: Древний

Злобин Михаил
5. О чем молчат могилы
Фантастика:
фэнтези
городское фэнтези
мистика
7.68
рейтинг книги
Книга пятая: Древний

Зеркало силы

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

Имя нам Легион. Том 5

Дорничев Дмитрий
5. Меж двух миров
Фантастика:
боевая фантастика
рпг
аниме
5.00
рейтинг книги
Имя нам Легион. Том 5

Аномальный наследник. Том 3

Тарс Элиан
2. Аномальный наследник
Фантастика:
фэнтези
7.74
рейтинг книги
Аномальный наследник. Том 3

Архил...? 4

Кожевников Павел
4. Архил...?
Фантастика:
фэнтези
попаданцы
альтернативная история
5.50
рейтинг книги
Архил...? 4

Хозяйка лавандовой долины

Скор Элен
2. Хозяйка своей судьбы
Любовные романы:
любовно-фантастические романы
6.25
рейтинг книги
Хозяйка лавандовой долины

Отмороженный 10.0

Гарцевич Евгений Александрович
10. Отмороженный
Фантастика:
боевая фантастика
рпг
5.00
рейтинг книги
Отмороженный 10.0

Ваше Сиятельство 2

Моури Эрли
2. Ваше Сиятельство
Фантастика:
фэнтези
альтернативная история
аниме
5.00
рейтинг книги
Ваше Сиятельство 2