Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
C.doc
Скачиваний:
35
Добавлен:
08.05.2015
Размер:
1.17 Mб
Скачать

Работа с дисплеем в графическом режиме

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

1. Инициализация графического режима. Прототип функции:

void far initgraph(int far *graphdriver, int far *graphmode, char far *pathtodriver);

graphdriver - целое, задающее используемый графический драйвер:

Символическая константа

Численное значение

Описание

DETECT

0

Требование автоопределения типа

CGA

1

Монитор CGA - Color Graphics Adapter

MCGA

2

Монитор монохромный CGA

EGA

3

Монитор EGA - Enhanced Graphics Adapter

EGA64

4

Монитор EGA - 64 цвета

EGAMONO

5

Монитор монохромный EGA

RESERVED

6

Зарезервированный номер монитора

HERCMONO

7

Монитор Hercules

ATT400

8

Монитор ATT400

VGA

9

Монитор VGA - Video Graphic Array

PC3270

10

Монитор PC3270

Если graphdriver=DETECT, то в graphmode возвращается значение максимального разрешения. Если graphdriver не равно DETECT, то путем задания graphmode можно устанавливать подрежимы, например, для монитора VGA:

graphmode

Значение

Колонок-строк

VGALO

0

640*200

VGAMED

1

640*350

VGAHI

2

640*480

Параметр pathtodriver задает путь до графического драйвера (где искать соответствующий драйвер). Драйверы имеют имена с расширениями bgi, например, egavga.bgi - графический драйвер мониторов EGA и VGA.

2. Закрыть графический режим. Прототип функции:

void far closegraph(void);

3. Определение размеров экрана по координатам соответственно x и y. Прототипы функций:

int far getmaxx(void);

int far getmaxy(void);

Координаты верхней левой точки экрана - (0,0). Поэтому, например, для монитора VGA эти функции вернут значения координат правой нижней точки экрана 639 и 479.

4. Установка цвета рисования. Прототип функции:

void far setcolor(int color);

Цвета устанавливаются такие же, как и в символьном режиме, кроме режима BLINK.

5. Установка текстовых параметров. Прототип функции:

void far settextstyle(int font, int direction, int charsize);

где параметр font задает тип шрифта:

Символическое имя

Значение

Описание

DEFAULT_FONT

0

шрифт 8*8 точек

TRIPLEX_FONT

1

штриховой утроенный

SMALL_FONT

2

штриховой малый

SANSSERIF_FONT

3

штриховой гротесковый

GOTHIC_FONT

4

штриховой готический

Параметр direction задает направление шрифта:

Символическое имя

Значение

Описание

HORIZ_DIR

0

слева направо

VERT_DIR

1

снизу вверх

Параметр charsize задает коэффициент увеличения шрифта - это целое число от 1 до 10 включительно.

6. Вывод в заданную точку. Прототип функции:

void far moveto(int x, int y);

Несмотря на то, что в графическом режиме нет курсора, но есть “невидимо” помеченная точка на экране - текущее положение начала рисования. Ряд функций используют эту точку. Данная функция меняет координаты этой точки. Данную точку меняют также все функции рисования, и, как правило, координаты этой точки становятся равными координате последней выведенной точки.

7. Установка шаблона и цвета заполнения. Прототип функции:

void far setfillstyle(int pattern, int color);

Шаблон и цвет заполнения применяются в функциях, выводящих на экран какие-либо фигуры. Параметр pattern задает стиль заполнения фигуры:

Символическое имя

Значение

Описание

EMPTY_FILL

0

заполнение цветом фона

SOLID_FILL

1

сплошное заполнение

LINE_FILL

2

заполнение линиями ---

LTSLASH_FILL

3

заполнение ///

SLASH_FILL

4

заполнение жирными ///

BKSLASH_FILL

5

заполнение жирными \\\

LTBKSLASH_FILL

6

заполнение \\\

HATCH_FILL

7

легкий крестообразный щтрих

XHATCH_FILL

8

тяжелый крестообразный штрих

INTERLEAVE_FILL

9

расходящиеся линии

WIDEDOT_FILL

10

редкие точки

CLOSEDOT_FILL

11

частые точки

USER_FILL

12

шаблон пользователя, задается в виде 8 байт в функции setfillpattern

8. Установка текущих толщины и стиля линии. Прототип функции:

void far setlinestyle(int linestyle, unsigned npattern, int thickness);

Параметр linestyle задает стиль линии:

Символическое имя

Значение

Описание

SOLID_LINE

0

сплошная линия

DOTTED_LINE

1

точечная линия

CENTER_LINE

2

концентрированная линия

DASHED_LINE

3

штриховая линия

USERBIT_LINE

4

стиль пользователя

Параметр thickness задает толщину линии:

Символическое имя

Значение

Описание

NORM_WIDTH

1

ширина 1 точка растра

THICK_WIDTH

3

ширина 3 точки растра

Параметр npattern - 16-битный шаблон, используемый в случае задания стиля пользователя, то есть когда linestyle=4.

9. Вывод линии. Прототип функции:

void far line(int x0, int y0, int x1, int y1);

Данная функция выводит линию от точки 0 до точки 1 цветом, установленным функцией setcolor, и стилем, установленным функцией setlinestyle.

10. Вывод линии от текущей точки к указанной. Прототип функции:

void far lineto(int x, int y);

Данная функция выводит линию от текущей точки к указанной цветом, установленным функцией setcolor, и стилем, установленным функцией setlinestyle.

11. Вывод полосы. Прототип функции:

void far bar(int left, int top, int right, int bottom);

Полоса выводится цветом и стилем, установленным функцией setfillstyle.

12. Вывод текста с текущей позиции. Прототип функции:

void far outtext(char far *textstring);

Данная функция выводит текст цветом, установленным функцией setcolor, и стилем, установленным функцией settextstyle.

13. Вывод текста с указанной позиции. Прототип функции:

void far outtextxy(int x, int y, char far *textstring);

Данная функция выводит текст цветом, установленным функцией setcolor, и стилем, установленным функцией settextstyle.

14. Вывод точки указанного цвета. Прототип функции:

void far putpixel(int x, int y, int pixel_color);

15. Установка текущего цвета фона. Прототип функции:

void far setbkcolor(int color);

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

16. Получение цвета указанной точки экрана. Прототип функции:

int far getpixel(int x, int y);

17. Определение текущей позиции. Прототипы функций:

int far getx(void);

int far gety(void);

18. Сохранение части экрана в оперативной памяти. Прототип функции:

void far getimage(int left, int top, int right, int bottom, void far *bitmap);

Объем буфера хранения можно определить с помощью функции imagesize.

19. Определение памяти под экранный буфер. Прототип функции:

unsigned far imagesize(int left, int top, int right, int bottom);

20. Вывод на экран содержимого буфера. Прототип функции:

void far putimage(int x, int y, void far *bitmap, int op);

Параметр op задает “комбинирующий” оператор, который управляет вычислением цвета каждой точки. Варианты этого параметра:

Символическое имя

Значение

Описание

COPY_PUT

0

копирование

XOR_PUT

1

логическое исключающее “или”

OR_PUT

2

логическое “или”

AND_PUT

3

логическое “и”

NOT_PUT

4

копирование инверсного значения

Пример вывода прямоугольника желтого цвета размера 250*150 точек, внутри которого раcполагается полоса красного цвета с расстояниями между ними в две точки, а внутри полосы надпись белого цвета “ПРОВЕРКА”. Вся картинка располагается в центре экрана.

#include <graphics.h>

#include <conio.h>

void main(void)

{

int gr_dr=DETECT,gr_mode;

int col_a=YELLOW, col_b=RED, col_c=WHITE;

int x_max,y_max;

int x,y;

/* открываем графический режим */

initgraph(&gr_dr,&gr_mode,"");

/* определяем границы экрана */

x_max=getmaxx();

y_max=getmaxy();

/* определяем левую верхнюю координату картинки */

x=(x_max-250)/2;

y=(y_max-150)/2;

/* устанавливаем стиль линии и рисуем примоугольник */

setlinestyle(SOLID_LINE,0,NORM_WIDTH);

setcolor(col_a);

moveto(x,y);

lineto(x,y+149);

lineto(x+249,y+149);

lineto(x+249,y);

lineto(x,y);

/* устанавливаем стиль и цвет и выводим полосу */

setfillstyle(SOLID_FILL,col_b);

bar(x+3,y+3,x+246,y+146);

/* выводим надпись */

settextstyle(DEFAULT_FONT,HORIZ_DIR,1);

setcolor(col_c);

outtextxy(x+90,y+70,"ПРОВЕРКА");

/* делаем паузу до нажатия любой клавиши */

getch();

/* закрываем графический режим */

closegraph();

}

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]