ScrollConsoleScreenBuffer功能将一个字符单元块从屏幕缓冲区的一部分移动到同一屏幕缓冲区的另一部分。该函数指定要移动的源矩形的左上单元格和右下单元格以及左上单元格的新位置的目标坐标。源单元格中的字符和颜色数据被移动到新位置,移动中留下的任何单元格都以指定的字符和颜色填充。如果指定了剪切矩形,则其外部的单元格将保持不变。
ScrollConsoleScreenBuffer可用于通过将行中第一个单元格的坐标指定为目标坐标并指定包含行下方所有行的滚动矩形来删除行。
以下示例显示了使用剪切矩形仅滚动屏幕缓冲区的最下面15行。指定矩形中的行一次滚动一行,块的顶行将被丢弃。剪切矩形外的屏幕缓冲区的内容保持不变。
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);
如果(!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,/ * scrolling rectangle * /
& srctClipRect,/ * clipping rectangle * /
coordDest,/ *左上角的目标单元格* /
&chiFill); /* fill character and color */