|
| БЕСПЛАТНАЯ ежедневная online лотерея! Выигрывай каждый день БЕСПЛАТНО! |
|
|
Scrolling a Screen Buffer's Contents
The ScrollConsoleScreenBuffer function moves a block of character cells from one part of a screen buffer to another part of the same screen buffer. The function specifies the upper left and lower right cells of the source rectangle to be moved and the destination coordinates of the new location for the upper left cell. The character and color data in the source cells is moved to the new location, and any cells left empty by the move are filled in with a specified character and color. If a clipping rectangle is specified, the cells outside of it are left unchanged.
ScrollConsoleScreenBuffer can be used to delete a line by specifying coordinates of the first cell in the line as the destination coordinates and specifying a scrolling rectangle that includes all the rows below the line. The following example shows the use of a clipping rectangle to scroll only the bottom 15 rows of the screen buffer. The rows in the specified rectangle are scrolled up one line at a time, and the top row of the block is discarded. The contents of the screen buffer outside the clipping rectangle are left unchanged.
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"); /* Get the screen buffer size. */ fSuccess = GetConsoleScreenBufferInfo(hStdout, &csbiInfo); if (! fSuccess) MyErrorExit("GetConsoleScreenBufferInfo"); /* * The scrolling rectangle is the bottom 15 rows of the
* screen buffer. */ srctScrollRect.Top = csbiInfo.dwSize.Y - 16; srctScrollRect.Bottom = csbiInfo.dwSize.Y - 1; srctScrollRect.Left = 0; srctScrollRect.Right = csbiInfo.dwSize.X - 1; /* The destination for the scroll rectangle is one row up. */ coordDest.X = 0; coordDest.Y = csbiInfo.dwSize.Y - 17; /* * The clipping rectangle is the same as the scrolling rectangle. * The destination row is left unchanged. */ srctClipRect = srctScrollRect;
/* Fill the bottom row with green blanks. */ chiFill.Attributes = BACKGROUND_GREEN | FOREGROUND_RED; chiFill.Char.AsciiChar = ' '; /* Scroll up one line. */ fSuccess = ScrollConsoleScreenBuffer( hStdout, /* screen buffer handle */ &srctScrollRect, /* scrolling rectangle */ &srctClipRect, /* clipping rectangle */ coordDest, /* top left destination cell*/ &chiFill); /* fill character and color */
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
| Пригласи друзей и счет твоего мобильника всегда будет положительным! |
Прокрутка Экранного Буферного Содержания
Функция ScrollConsoleScreenBuffer перемещает блока символьных ячеек от одной части экранного буфера до другой части того же самого экранного буфера. Функция определяет верхний левый и правые нижние ячейки исходного прямоугольника, который нужно перемещать и координаты расположения новой позиции для верхней левой ячейки. Символьные и цветные данные в исходных ячейках перемещены на новую позицию, и любые ячейки оставили пустой перемещением заполнены определенным символом и цветом. Если вырезать прямоугольник определен, ячейки вне него оставлены неизменным.
ScrollConsoleScreenBuffer МОЖЕТ быть использован, чтобы удалять строку определяя координаты первой ячейки на линии как координаты расположения и определяя прокрутку прямоугольника, которая включает все колонки ниже линии. Следующий пример показывает использование вырезать прямоугольника, чтобы перемещать только нижние 15 колонок экранного буфера. Колонки в определенном прямоугольнике перемещены по одном построчно, и верхняя колонка блока отвергнута. Содержание экранного буфера за пределами вырезать прямоугольника оставлено неизменным.
ПРООПЕРИРУЙТЕ hStdout; BOOL fSuccess; CONSOLE_SCREEN_BUFFER_INFO csbiInfo; SMALL_RECT srctScrollRect, srctClipRect; CHAR_INFO chiFill; COORD coordDest; hStdout = GetStdHandle(STD_OUTPUT_HANDLE); если (hStdout == INVALID_HANDLE_VALUE) MyErrorExit("GetStdHandle"); /* Получите экранный буфер size. */ fSuccess = GetConsoleScreenBufferInfo(hStdout, &csbiInfo); если (! fSuccess) MyErrorExit("GetConsoleScreenBufferInfo"); /* * Перемещающий прямоугольник - нижние 15 колонок the
* экранный буфер. */ srctScrollRect.Завершите = csbiInfo.dwSize.Y - 16; srctScrollRect.Вникните = csbiInfo.dwSize.Y - 1; srctScrollRect.Оставившее = 0; srctScrollRect.Право = csbiInfo.dwSize.X - 1; /* Расположение для перемещает прямоугольник - один колонка up. */ coordDest.X = 0; coordDest.Y = csbiInfo.dwSize.Y - 17; /* * Вырезать прямоугольник такой же как и перемещающий прямоугольник. * Колонка расположения оставлена неизменным. */ srctClipRect = srctScrollRect;
/* Заполните низу колонку зеленым blanks. */ chiFill.Приписывает = BACKGROUND_GREEN | FOREGROUND_RED; chiFill.Символ.AsciiChar = ' '; /* Переместитесь по одном line. */ fSuccess = ScrollConsoleScreenBuffer( hStdout, /* Экранная буферная ручка */ &srctScrollRect, /* перемещая прямоугольник */ &srctClipRect, /* вырезав прямоугольник */ coordDest, /* верх оставил ячейку расположения*/ &chiFill); /* символ наполнителя и цвета */
|
|
|
|
| |