Sb97809
.pdfОбласть экрана задается координатами левого верхнего и правого нижнего углов. design, source – область памяти, в которую (из которой) переносится часть видеопамяти. В функции movetext() два последних аргумента указывают на координаты верхнего левого угла нового расположения области экрана.
17.2. Графика в С++
Так же как и в текстовом режиме, все графические функции оперируют окнами. Отличие графического окна от текстового состоит в том, что левый верхний угол имеет координаты (0;0). В текстовом режиме существуют строки, символы, а в графическом – пиксели, которые имеют свой цвет.
Перед использованием графических функций необходимо установить видеоадаптер в графический режим.
Установка видеоадаптера в графический режим: void initgraph (int * driver, int * mode, char * pach);
В состав графического пакета входят заголовочный файл graphics.h, библиотечный файл graphich.lib, драйверы графических устройств –*.bgi, символьные шрифты – *.chr.
Функция initgraph() считывает в память соответствующий драйвер, устанавливает видеорежим (mode) и определяет маршрут к директории, в которой находится соответствующий драйвер *.bgi. Если маршрут не указан, драйвер ищется в текущей директории.
При использовании initgraph() можно указать или конкретный драйвер, или задать автоматическое определение (детектирование) типа видеоадаптера и выбора соответствующего драйвера уже во время выполнения программы (макрос DETECT). Это позволяет переносить без изменения программы на компьютеры с другими видеоадаптерами.
Пример:
int driver = DETECT;
initgraph (& driver, & mode,””);
Чтобы выйти из графического режима и вернуться в текстовый режим, необходимо использовать функции:
void closegraph(void); void restorecrtmode(void);
Функция closegraph() используется, если программа дальше будет работать в текстовом режиме. Эта функция освобождает память, занятую до вызова функции initgraph(). Если программа завершает работу, то можно при-
41
менить функцию restorecrtmode(), устанавливающую видеоадаптер в текстовый режим, который предшествовал первому вызову функции initgraph().
Установка цвета. Тип графического видеоадаптера, установленного на компьютере, определяет количество цветов, которые могут быть использованы в графическом режиме.
Установка цвета фона производится функцией void setbkcolor(int color);
а изменение палитры – функцией void setpalette(int index, int color);
Установка цвета пикселя. Графический экран представляет собой массив пикселей. Каждый пиксель соответствует одной точке на экране и может иметь свой цвет. Установить цвет пикселя в точке экрана с координатами х, у можно с помощью функции
void putpixel(int x,int y,int color);
Группа «рисующих» функций, использующиеся для создания геометрических объектов и фигур.
Функция line() чертит на экране прямую линию от точки с координатами х, у до точки с координатами х1, у1 текущим цветом:
void line(int x, int y, int x1, int y1);
Функция circle() рисует на экране окружность с центром в точке с координатами х, у и радиусом radius (единица измерения – пиксель):
void circle(int x, int y, int radius);
По умолчанию текущий цвет устанавливается WHITE. Изменить текущий цвет, которым рисуются линии, можно обратившись к функции:
void setcolor (int color);
Функция rectangle() рисует прямоугольник: void rectangle(int left, int top, int right, int bottom);
Для закрашивания (заполнения) замкнутого контура служит функция floodfill(), котораязакрашиваетобластьзаданнымцветомпозаданномушаблону:
void floodfill(int x, int y, int bordecolor);
где х, y – координаты точки внутри контура, bordecolor – цвет контура. Цвет и шаблон заполнения устанавливается функцией:
void setfillstyle(int pattern, int color);
Шаблон закрашивания и соответствующие ему макрос и значение pattern следующие:
42
0 – заполнение цветом фона;
1 – сплошное заполнение заданным цветом;
2 – заполнение при помощи линий.
Создание графического окна. Графическое окно может не совпадать с экраном. Создать графическое окно можно, используя функцию:
void far setviewport (int left, int top, int right, int bottom, int flag);
Параметры left, top, right, bottom задают местоположение и размер окна в абсолютных координатах. Параметр flag устанавливает режим выхода за границу окна. Если flag ≠ 0, то происходит автоматическое прерывание выдачи при выходе за границу окна. При flag = 0 может происходить вывод за границами окна. И в том и в другом случае ошибка не фиксируется.
Пример:
// инициализация графического режима int driver = DETECT, gmode, error, code
//максимально возможный режим видеоадаптера initgraph(&driver, &mode, “ ”);
//результат инициализации errorcode=graphresult();
if (errorcode != grOK) // ошибка
{
printf(“Ошибка:%s\n, ” grapherrormsg(errorcode)); printf(“для останова нажмите любую клавишу \n”); getch();
exit(1); // завершение работы
}
}
Перечисленные функции служат для управления визуальными характеристиками окна и текста. Они отражают возможности языка программирования для использования функционала корректировки размера окна, его местоположения, очистки, изменения цвета; использования геометрических фигур.
43
Список рекомендуемой литературы
Березин Б. И., Березин С. Б. Начальный курс С и С++. М.: ДИАЛОГ-
МИФИ, 2005.
Богумирский Б. С. Руководство пользователя ПЭВМ: в 2-х ч. С-Пб.: Печатный двор, 1994.
Керниган Б., Ритчи Д.. Язык программирования Си. М.: Финансы и статистика, 1992.
Рассохин Д. От С к С++. М.: Эдель, 1993.
Страуструп Б. Язык программирования С++. Киев: Диасофт, 1991. Уэйт М., Парта С., Мартин Д. Язык Си: руководство для начинающих.
М.: Мир, 1998.
Эккель Б. Философия С++. Введение в стандартный С++. 2-е изд. СПб.:
Питер, 2004.
44
|
Оглавление |
|
ВВЕДЕНИЕ.............................................................................................................. |
3 |
|
1. |
ИМЕНА ЗАГОЛОВОЧНЫХ ФАЙЛОВ В С++ ................................................ |
5 |
2. |
СТРОКОВЫЕ ПЕРЕМЕННЫЕ В С++ .............................................................. |
5 |
3. |
КЛЮЧЕВЫЕ СЛОВА BOOL, TRUE, FALSE .................................................. |
6 |
4. |
ССЫЛКИ В С++ .................................................................................................. |
7 |
5. |
ТИП VOID ............................................................................................................ |
8 |
6. |
ОПРЕДЕЛЕНИЕ ПЕРЕМЕННЫХ НЕПОСРЕДСТВЕННО |
|
|
ПЕРЕД ИСПОЛЬЗОВАНИЕМ........................................................................... |
9 |
7. |
ПЕРЕДАЧА ОБЪЕКТОВ КАК АРГУМЕНТОВ ФУНКЦИИ....................... |
11 |
8. |
МАССИВЫ ОБЪЕКТОВ.................................................................................. |
11 |
9. |
УКАЗАТЕЛЬ НА ОБЪЕКТ.............................................................................. |
13 |
10. КЛЮЧЕВОЕ СЛОВО THIS............................................................................ |
13 |
|
11. ПЕРЕГРУЗКА ФУНКЦИЙ И ОПЕРАЦИЙ.................................................. |
14 |
|
|
11.1. Перегруженные функции...................................................................... |
14 |
|
11.2. Перегрузка конструктора ...................................................................... |
15 |
|
11.3. Выбор экземпляра функции.................................................................. |
16 |
|
11.4. Перегрузка стандартных операций ...................................................... |
17 |
|
11.5. Дружественные функции-операции..................................................... |
19 |
|
11.6. Использование ссылочных переменных.............................................. |
20 |
12. АРГУМЕНТЫ ПО УМОЛЧАНИЮ............................................................... |
21 |
|
13. УКАЗАТЕЛИ НА ПРОИЗВОДНЫЕ ТИПЫ ................................................ |
22 |
|
|
13.1. Виртуальные функции........................................................................... |
22 |
|
13.2. Чистые виртуальные функции и абстрактные типы.......................... |
24 |
|
13.3. Виртуальные базовые классы............................................................... |
25 |
14. ШАБЛОНЫ...................................................................................................... |
26 |
|
|
14.1. Шаблоны функций................................................................................. |
27 |
|
14.2. Использование шаблонов с двумя типами параметров ..................... |
29 |
|
14.3. Шаблоны классов................................................................................... |
29 |
15. ЧТЕНИЕ И ЗАПИСЬ ФАЙЛОВ.................................................................... |
30 |
|
|
15.1. Файл и поток .......................................................................................... |
30 |
|
15.2. Открытие файла..................................................................................... |
31 |
|
15.3. Запись символов в поток....................................................................... |
32 |
45
15.4. Закрытие файла...................................................................................... |
33 |
15.5. Форматный ввод–вывод файлов .......................................................... |
34 |
15.6. Ввод–вывод строк.................................................................................. |
34 |
15.7. Функции позиционирования ................................................................ |
35 |
15.8. Функции управления экраном.............................................................. |
36 |
16. ЛОКАЛЬНЫЕ КЛАССЫ................................................................................ |
36 |
16.1. Вложенные классы................................................................................. |
37 |
17. ФУНКЦИИ УПРАВЛЕНИЯ ЭКРАНОМ...................................................... |
38 |
17.1. Функции работы в текстовом режиме................................................. |
39 |
17.2. Графика в С++ ........................................................................................ |
41 |
Список рекомендуемой литературы.................................................................... |
44 |
Куракина Наталия Игоревна, Сулоева Елена Сергеевна
Объектно-ориентированное программирование на С++
Учебное пособие
Редактор Е. А. Ушакова
Компьютерная верстка Е. С. Николаевой
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Подписано в печать 05.04.19. Формат 60×84 1/16. Бумага офсетная. Печать цифровая. Печ. л. 3,0.
Гарнитура «Times New Roman». Тираж 136 экз. Заказ 48.
––––––––––––––––––––––––––––––––––––––––––––––––––––––––––
Издательство СПбГЭТУ «ЛЭТИ» 197376, С.-Петербург, ул. Проф. Попова, 5
46