Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Вариант_№21.doc
Скачиваний:
0
Добавлен:
01.07.2025
Размер:
323.58 Кб
Скачать

setgraphbufsize

Функция Изменяет размер внутреннего графического буфера.

Синтаксис #include <graphics.h>

unsigned far setgraphbufsize(unsigned bufsize);

= 159 =

Файл, содержащий graphics.h

прототип

Описание Некоторые графические функции (такие как

floodfill) используют буфер памяти, который выде-

ляется при вызове initgraph и отменяется при вы-

зове closegraph. По умолчанию размер этого, выде-

ляемого с помощью _graphgetmem, буфера равен 4096

байт.

Вы можете сделать этот буфер меньше (для сбереже-

ния памяти) или больше (если, например, при обра-

щении к floodfill возвращается ошибка -7:Out of

flood memory).

setgraphbufsize сообщает initgraph сколько памяти

выделить для этого встроенного графического буфе-

ра, когда она обращается к _graphgetmem.

Замечание. Вы должны вызывать setgraphbufsize до

вызова initgraph. Если же initgraph вызван, то

все обращения к setgraphbufsize будут игнориро-

ваться до вызова closegraph.

Возвращаемое setgraphbufsize возвращает предыдущий раз-

значение мер встроенного буфера.

Переносимость Функция уникальна для Turbo C++. Она работает

только на компьютерах IBM PC и совместимых с ни-

ми, оснащенных дисплейными адаптерами, поддержи-

вающими графический режим.

Смотрите также closegraph, _graphfreemem, _graphgetmem,

initgraph, sector.

Пример:

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

#define BUFSIZE 1000 /* размер внутреннего буфера */

int main(void)

{

/* Запрос автоопределения */

int graphdriver = DETECT, gmode, errorcode;

int x,y,oldsize;

char msg[80];

= 160 =

oldsize = setgraphbufsize(BUFSIZE);

/* инициализация графики и локальных переменных */

initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */

errorcode = graphresult();

if(errorcode != grOk) /* если ошибка */

{

printf("Ошибка :%s\n",grapherrormessage(errorcode));

printf("Для останова нажмите любую клавишу\n");

getch();

exit(1); /* завершение с кодом ошибки */

}

x = getmaxx()/2;

y = getmaxy()/2;

/* вывести информацию */

sprintf(msg,"Размер графического буфера: %d",BUFSIZE);

settextjustify(CENTER_TEXT,CENTER_TEXT);

outtextxy(x,y,msg);

sprintf(msg,"Старый размер графического буфера: %d",oldsize);

outtextxy(x,y+textheigth("W"),msg);

/* очистка */

getch();

closegraph();

return 0;

}

setgraphmode

Функция Переводит систему в графический режим, очищает

экран.

Синтаксис #include <graphics.h>

void far setgraphmode(int mode);

Файл, содержащий graphics.h

прототип

Описание setgraphmode выбирает графический режим

отличный от установленного по умолчанию функцией

initgraph. mode должен быть режимом, допустимым

для используемого драйвера. setgraphmode очищает

экран и устанавливает все графические величины в

значение по умолчанию (CP, палитра, цвет, окно и

т.д.).

Вы можете использовать setgraphmode совместно с

restorecrtmode для переключения между графическим

и текстовым режимами.

= 161 =

Возвращаемое Если вы задаете setgraphmode несуществующий

значение для используемого драйвера режим, то graph-

result вернет значение -10 (grInvalidMode).

Переносимость Функция уникальна для Turbo C++. Она работает

только на компьютерах IBM PC и совместимых с ни-

ми, оснащенных дисплейными адаптерами, поддержи-

вающими графический режим.

Смотрите также getgraphmode, getmoderange, graphresult,

initgraph, restorecrtmode.

Пример:

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

Int main(void)

{

/* Запрос автоопределения */

int graphdriver = DETECT, gmode, errorcode;

int x,y;

/* инициализация графики и локальных переменных */

Initgraph(&graphdriver,&gmode,"");

/* получение результата инициализации */

errorcode = graphresult();

if(errorcode != grOk) /* если ошибка */

{

printf("Ошибка :%s\n",grapherrormessage(errorcode));

printf("Для останова нажмите любую клавишу\n");

getch();

exit(1); /* завершение с кодом ошибки */

}

x = getmaxx()/2;

y = getmaxy()/2;

/* вывести сообщение */

settextjustify(CENTER_TEXT,CENTER_TEXT);

outtextxy(x,y,"Press any key to exit graphics...");

getch();

/* перевести систему в текстовый режим */

restorecrtmode();

printf("Мы в текстовом режиме\n");

printf("Для возврата в графический режим нажмите клавишу.\n");

getch();

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

setgraphmode(getgraphmode());

= 162 =

/* вывести сообщение */

settextjustify(CENTER_TEXT,CENTER_TEXT);

outtextxy(x,y,"We're back in graphics mode...");

outtextxy(x,y+textheight("W"),"Press any key to halt...");

/* очистка */

getch();

closegraph();

return 0;

}

setjmp

Функция Устанавливает нелокальный переход.

Синтаксис #include <setjmp.h>

int setjmp(jmp_buf jmpb);

Файл, содержащий setjmp.h

прототип

Описание setjmp захватывает состояние задачи в jmpb и воз-

вращает 0.

Последующий вызов longjmp восстанавливает состоя-

ние задачи из jmpb и возвращается также как и

setjmp со значением val.

Cостояние задачи представляет собой следующее:

- все сегментные регистры (CX,DS,ES,SS);

- переменные-регистры (SI,DI);

- указатель стека (SP);

- указатель базы (BP);

- флаги.

Состояние задачи является достаточно полным, так

что функции setjmp и longjmp могут быть использо-

ваны как инструмент для организации сопрограмм.

Перед использованием функции longjmp необходимо

вызвать функцию setjmp. Программа вызывающая

setjmp и устанавливающая jmpb должна оставаться

активной и не должна возвращать управления до вы-

зова longjmp. Если это случится, то результат

непредсказуем.

Данные подпрограммы могут быть полезны для работы

с ошибками и исключительными ситуациями, происхо-

дящими в низкоуровневых подпрограммах прикладных

= 163 =

программ.

Примечание. Функции setjmp и longjmp нельзя ис-

пользовать для реализации оверлейных программ.

Обычно setjmp и longjmp сохраняют и восстананав-

ливают все, необходимые для реализации сопрог-

рамм, однако для управления оверлеями необходимо

следить за стеком, причем подразумевается, что

стек один. При реализации сопрограмм вы обычно

используете два стека, или две части одного сте-

ка, и поэтому администратор оверлеев не сможет

корректно их отслеживать.

Вы можете иметь задачи, работающие в фоновом ре-

жиме, которые используют свой стек, или свой раз-

дел общего стека, однако вы должны быть уверены,

что они не используют оверлеев, и вы не должны

использовать оверлейные версии setjmp и longjmp

для переключения на эти фоновые задачи.

Возвращаемое setjmp возвращает 0 при начальном вызове.

значение Если это вызов для возврата после longjmp, setjmp

возвращает ненулевое значение (как в примере).

Переносимость Функция поддерживаются на системах UNIX и стандар-

том ANSI C.

Смотрите также longjmp, signal.

Пример:

#include <stdio.h>

#include <process.h>

#include <setjmp.h>

void subroutine(void);

imp_buf jumper;

int main()

{

int value;

value = setjmp(jumper);

if (value != 0) {

printf("longjmp со значением %d\n", value);

exit(value);

}

printf("Вызов подпрограммы ... \n");

subroutine();

return 0;

}

= 164 =

void subroutine(void)

{

longjmp(jumper,l);

}

setlinestyle

Функция Устанавливает толщину и тип линии.

Синтаксис #include <graphics.h>

void far setlinestyle(int linestyle,

unsigned upattern, int thickness);

Файл, содержащий graphics.h

прототип

Описание Устанавливает тип для всех линий, рисуемых

функциями line, lineto, rectangle, drawpoly и

т.д.

Структура linesettingstype определена в

graphics.h следующим образом:

struct linesettingstype{

int linestyle;

unsigned upattern;

int thickness;

};

linestyle определяет тип линий, который будет ис-

пользоваться (непрерывная, пунктир, штрихпунктир,

штриховая). Перечисленные line_styles, определен-

ные в graphics.h, дают названия этим операциям:

ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂ

Название Знач. Описание

ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂ

SOLID_LINE 0 сплошная

DOTTED_LINE 1 пунктир

CENTER_LINE 2 штрихпунктир

DASHED_LINE 3 штриховая

USERBIT_LINE 4 тип линии, заданный

пользователем

ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂ

thickness определяет будут ли последующие линии

тонкими или толстыми.

ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂ

Название Знач. Описание

= 165 =

ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂ

NORM_WIDTH 1 толшина в 1 пиксел

THICK_WIDTH 3 толщина в 3 пиксела

ЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂЂ

upattern -это 16-битный шаблон, который использу-

ется только когда linestyle равен USERBIT_LINE

(4). В этом случае, каждый бит в шаблоне установ-

ленный в 1, соответствует пикселю на линии в те-

кущем цвете. Например, сплошной линии соответстс-

вует upattern равный 0xFFFF (рисуются все пиксе-

лы), а пунктиру соответствует upattern равный

0x3333 или 0x0F0F. Если же параметр linestyle в

setlynestyle не равен USERBIT_LINE (!=4), то

upattern поддерживается, но игнорируется.

Замечание. Параметр linestyle не работает при

построении дуг, кругов, эллипсов и секторов. В

этом случае используется пареметр thickness.

Возвращаемое Если в setlinestyle передается неправиль-

значение ный ввод, graphresult возвратит -11, а теку-

щий тип линии останется без изменений.

Переносимость Функция уникальна для Turbo C++. Она работает

только на компьютерах IBM PC и совместимых с ни-

ми, оснащенных дисплейными адаптерами, поддержи-

вающими графический режим.

Смотрите также arc, bar3d, circle, drawpoly, ellipse,

getlinesettings, graphresult, line, linerel

lineto, pieslice, rectangle.

Пример:

#include <graphics.h>

#include <stdlib.h>

#include <stdio.h>

#include <conio.h>

/* имена поддерживаемых типов линий */

char lname[] = {"SOLID_LINE",

"DOTTED_LINE",

"CENTER_LINE",

"DASHED_LINE",

"USERBIT_LINE"

};

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