Очистка части окна в консоли - C (СИ)
Формулировка задачи:
Уважаемые умельцы-программисты. Скажите, пожалуйста, как очистить только часть окна в консоли, либо как сохранить часть содержимого окна при очистке.
Поясняю, функция system ("CLS") отчищает все окно. а мне нужно, чтобы оно оставляло какую-то произволную его часть.
Буду очень благодарен за помощь)
Решение задачи: «Очистка части окна в консоли»
textual
Листинг программы
#include <stdio.h> #include <Windows.h> void ClearRow(int X, int Y, int rowWidth) { HANDLE hStdOut; CONSOLE_SCREEN_BUFFER_INFO csbi; DWORD count; COORD homeCoords = {X,Y}; hStdOut = GetStdHandle( STD_OUTPUT_HANDLE ); if (hStdOut == INVALID_HANDLE_VALUE) return; if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return; // Fill the row with spaces if (!FillConsoleOutputCharacter( hStdOut, (TCHAR) ' ', rowWidth, homeCoords, &count )) return; //Fill the row with the current colors and attributes if (!FillConsoleOutputAttribute( hStdOut, csbi.wAttributes, rowWidth, homeCoords, &count )) return; //Move the cursor home SetConsoleCursorPosition( hStdOut, homeCoords ); } void ClearRectangle(int X1, int Y1, int X2, int Y2) { while(Y1<Y2) ClearRow(X1, Y1++, X2-X1); } int main() { int i; for(i=0;i<2000;i++) printf("*"); ClearRectangle(20,10,40,20);//< - clear the rectangle getchar(); return 0; }
Объяснение кода листинга программы
- #include
Включает стандартную библиотеку ввода-вывода, необходимую для отправки сообщений в консоль. - #include
Включает библиотеку Windows, которая содержит функции для работы с консолью. - void ClearRow(int X, int Y, int rowWidth) Определяет функцию, которая очищает указанную строку в консоли.
- HANDLE hStdOut; Объявляет переменную типа HANDLE, которая будет использоваться для работы с консолью.
- CONSOLE_SCREEN_BUFFER_INFO csbi; Объявляет структуру, которая содержит информацию о буфере консоли.
- DWORD count; Объявляет переменную типа DWORD, которая будет использоваться для подсчета количества записанных символов.
- COORD homeCoords = {X,Y}; Объявляет структуру COORD, которая содержит координаты курсора.
- hStdOut = GetStdHandle( STD_OUTPUT_HANDLE ); Получает дескриптор стандартного вывода.
- if (hStdOut == INVALID_HANDLE_VALUE) return; Проверяет, не является ли дескриптор недействительным, и возвращает управление, если это так.
- if (!GetConsoleScreenBufferInfo( hStdOut, &csbi )) return; Получает информацию о буфере консоли.
- // Fill the row with spaces Заполняет указанную строку пробелами.
- if (!FillConsoleOutputCharacter( hStdOut, (TCHAR) ' ', rowWidth, homeCoords, &count )) return;
- //Fill the row with the current colors and attributes Заполняет указанную строку текущими цветами и атрибутами.
- if (!FillConsoleOutputAttribute( hStdOut, csbi.wAttributes, rowWidth, homeCoords, &count )) return;
- //Move the cursor home Перемещает курсор в начало указанной строки.
- SetConsoleCursorPosition( hStdOut, homeCoords );
- void ClearRectangle(int X1, int Y1, int X2, int Y2) Определяет функцию, которая очищает указанный прямоугольник в консоли.
- for(i=Y1;i<Y2;i++) Использует цикл для очистки каждой строки в прямоугольнике.
- ClearRow(X1, Y1++, X2-X1); Вызывает функцию ClearRow для очистки текущей строки.
- int main() Определяет точку входа в программу.
- int i; Объявляет переменную типа int для цикла.
- for(i=0;i<2000;i++) Использует цикл для вывода 2000 символов
*
. - *printf(`
);** Выводит символ
*` в консоль. - ClearRectangle(20,10,40,20); Вызывает функцию ClearRectangle для очистки прямоугольника.
- getchar(); Получает символ от пользователя и предотвращает закрытие консоли.
- return 0; Завершает программу.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д