Прокрутка содержания экранного буфера

Функция ScrollConsoleScreenBuffer перемещает блок символьных знакомест из одной части экранного буфера в другую часть того же самого экранного буфера. Функция устанавливает верхние левые и нижние правые ячейки исходного прямоугольника, который будет перемещен и координаты назначения нового местоположения для верхней левой ячейки. Символ и данные о цвете в исходных ячейках перемещаются в новое место, а любые ячейки, оставленные пустыми при перемещении, заполняются заданным символом и цветом. Если задается прямоугольник отсечения по границам, ячейки вне него остаются неизменными.

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

Нижеследующий пример выводит на экран использование прямоугольника отсечения по границам, чтобы прокрутить только нижние 15 строк экранного буфера консоли. Строки в определяемом прямоугольнике прокручиваются вверх по одной строке за раз, а верхняя строка блока отбрасывается. Содержание экранного буфера консоли вне прямоугольника отсечения по границам остается неизменным.

Обратите внимание! на то, что MyErrorExit - групповой символ - заместитель для определяемой программой функции, которая показывает на экране и обрабатывает аварийные ситуации.

 

HANDLE hStdout; 
BOOL fSuccess; 
CONSOLE_SCREEN_BUFFER_INFO csbiInfo; 
SMALL_RECT srctScrollRect, srctClipRect; 
CHAR_INFO chiFill; 
COORD coordDest; 
 
hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 

if (hStdout == INVALID_HANDLE_VALUE) 
    MyErrorExit("GetStdHandle"); 
 
// Получим размер экранного буфера. 
 
fSuccess = GetConsoleScreenBufferInfo(hStdout, &csbiInfo); 

if (! fSuccess) 
    MyErrorExit("GetConsoleScreenBufferInfo"); 
 
// Прямоугольник прокручивания содержит 15 нижних строчек экранного буфера. 
 
srctScrollRect.Top = csbiInfo.dwSize.Y - 16; 
srctScrollRect.Bottom = csbiInfo.dwSize.Y - 1; 
srctScrollRect.Left = 0; 
srctScrollRect.Right = csbiInfo.dwSize.X - 1; 
 
// Назначение прокручивания в прямоугольнике по одной строке вверх. 
 
coordDest.X = 0; 
coordDest.Y = csbiInfo.dwSize.Y - 17; 
 
// Прямоугольник отсечения - такой же самый, что и прямоугольник прокручивания. 
// Строка назначения остается неизменной

srctClipRect = srctScrollRect; 
 
// Заполним нижнюю строку зелеными пробелами. 
 
chiFill.Attributes = BACKGROUND_GREEN | FOREGROUND_RED; 
chiFill.Char.AsciiChar = ' '; 
 
// Прокрутим вверх одну строку.

fSuccess = ScrollConsoleScreenBuffer( 
    hStdout,         // дескриптор экранного буфера
    &srctScrollRect, // прямоугольник прокрутки 
    &srctClipRect,   // прямоугольник отсечения по границам 
    coordDest,       // верхняя левая ячейка назначения 
    &chiFill);       // заполнение символами и цветом 
 

 

Назад в оглавление темы
На главную страницу темы

Hosted by uCoz