Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Лекции.docx
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
933 Кб
Скачать
☆

16.2. Управление окном

void window(int left, int top, int right, int bottom); Описывает окно с абсолютными координатами. При некорректных аргументах выполнение игнорируется. Никаких внешних действий на экране не происходит!!!

16.3. Управление атрибутом (цветами символа и фона в окне)

Замечание. Все нижеперечисленные функции влияют только на выполнение функций консольного ввода-вывода. Например, функция printf выводит информацию только с позиции, где находится курсор, безотносительно назначенного окна.

void textcolor(int color); Цвет символа кодируется целыми значениями из диапазона [0-15].

Пример. textcolor(RED); // Красный цвет

void textbackground(int color); Цвет фона. Диапазон [0-7].

void textattr(int attr); Одновременное установка цветов символа и фона.

Структура памяти под аргумент attr побитно имеет вид:

7 6 5 4 3 2 1 0

B b b b f f f f ffff – символ, bbb – фон, B – мерцание.

Пример.

textattr(BLACK+(RED<<4)); // Черный символ на красном фоне

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

16.4. Информация о текстовом режиме

void gettextinfo(struct text_info *ptr);

Структура text_info определена в файле coniow.h и имеет вид:

struct text_info{

unsigned short winleft, wintop, winright, winbottom; //Текущее окно

unsigned short attribute, normattr; //Текущий атрибут

unsigned short currmode; //Текстовый режим

unsigned short screenheight, screenwidth; // Размеры экрана

short curx, cury; // Координаты курсора в окне

}

16.5. Пример

Формирование окон сообщений, подсказок, полей ввода.

Набор функций:

- message - вывод сообщений,

- status - вывод подсказок,

- diagnos - вывод диагностических сообщений,

- vvod - формирование полей ввода,

- out_text - вывод строки в окно,

- init_window - инициализировать окно,

- clear_window - очистить окно,

- ramka - нарисовать рамку окна.

/*****************************/

/* MESSAGE */

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

/*****************************/

#include <coniow.h>

#define EKRAN BLACK

void message(int nom, // N сообщения

int reg){ // режим: FULL=1-вывод, CLEAR=0-очистить окно

static struct mes{

int beg_x, // Коорди-

beg_y, // наты

end_x, // ок-

end_y, // на

char regim; // r-разрядка, p-плотный

char* text; // Текст сообщения

}def[ ]={ // Описание сообщений

28,2,52,4,'r',"ВВОД ДАННЫХ",

19,12,61,14,'p',"Имя файла входных данных",

.........................................

19,12,61,14,'r',"ВВОД ДАННЫХ ЗАКОНЧЕН"

};

struct mes *p; // Указатель на элемент описания

p=&def[nom-1];

if(reg){

init_window(p->beg_x, p->beg_y, p->end_x, p->end_y, BLACK,

LIGHTGRAY);

out_text(2, 2, 200, p->regim, p->text);

}else{

clear_window(p->beg_x, p->beg_y, p->end_x, p->end_y, EKRAN);

}

} // End message

Приведенные ниже функции включены в файл window.c.

/* Вывод строки в окно */

void out_text(int x, // Начальная позиция курсора по X

int y, // Начальная позиция курсора по Y

int kol, // Число выводимых символов

int reg, // Режим: r-разрядка, p-плотный

char *text){ // Текст сообщения

int i;

gotoxy(x, y);

for(i=0; i<kol && *(text+i) != '\0'; i++){

if(reg=='r')putch(' ');

if(*(text+i)=='\n'){

y++;

gotoxy(x, y);

}else{

putch(*(text+i));

}

}

} // End out_text

Замечание. Символы второй кодовой страницы надо задавать в виде:

\<код символа в 8-й системе счисления>. См. пример ниже.

/* Рисование рамки */

void ramka(int width, // ширина(в позициях)

int height){ // высота(в строках)

static unsigned char cont[ ]="+\226|"; //Символы рамки

int i;

gotoxy(1, 1);

putch(cont[0]);

for(i=2; i<width; i++)putch(cont[1]);

putch(cont[0]);

for(i=2; i<height; i++){

gotoxy(1, i);

putch(cont[2]);

gotoxy(width, i);

putch(cont[2]);

}

gotoxy(1, height);

putch(cont[0]);

for(i=2; i<width; i++)putch(cont[1]);

putch(cont[0]);

} // End ramka

Вопросы для самопроверки и контроля

Вопросы для самопроверки

1. Какой заголовочный файл нужен для работы с окнами?

2. Укажите начальные координаты курсора в текстовом режиме.

Контрольные вопросы

1. Какие функции работают в абсолютных координатах экрана?

2. Что делает функция textattr?

ЗАДАЧИ

Элементарные конструкции

1. Какие нижеприведенных записей можно использовать в качестве имен:

X Begin a[3] 3D_Studuo Step1 sin(x) CTEK a15x Str.X 1 конец _XX x_x

2. Какие из записей ниже являются целыми литералами:

0 +006 -45 3. .55 0712 &034 0xabc 0X12a5 &habc &H12A5

3. Какие из записей ниже можно считать литералами с плавающей точкой:

-123.4 34.05 75. -.05 0.0123 -34.593E-12 -2e5 1D15 d-23 1e1 -1e-1.2 0E-3

4. Записать на языках C и Basic следующие арифметические выражения:

a)

б)

в)

г)

д)

е)

5. Определить количество сотен натурального числа.

6. Дано трехзначное натуральное число n. Записать его в обратном порядке, например, 456 654.

7. Записать логическое выражение, принимающее значение true, если точка М(x,y) попадает в заштрихованную область:

a ) y б) y

1 1

x -1 1 x

1 2

-1

в) y г) y

2

2

-2 1 1 2 x -1 1 x

-2 -2

8. Записать логическое выражение, принимающее значение true, если из отрезков с длинами x, y, z можно составить треугольник.

9. Начертить на плоскости XY области, в которых перечисленные ниже выражения принимают значения true (выражения записаны на языке C):

а) x*x+y*y<=1 || x>0

б) x>y == y>0

в) x+y<=1 || x>=0 && !(y<0)

г) x*x+y*y<1 && y>=x ==y>.5