- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Initgraph(&graphdriver,&gmode,"");
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
- •Int main(void)
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"
};
