BOOL ScrollConsoleScreenBuffer(
HANDLE hConsoleOutput,
const SMALL_RECT *lpScrollRectangle, // 捲動區域
const SMALL_RECT *lpClipRectangle, // 裁剪區域(NULL=整個緩衝區)
COORD dwDestinationOrigin, // 目的地左上角
const CHAR_INFO *lpFill // 填充字元與屬性
);
實驗場景:主控台印出 4 行文字,設定捲動區域 Left=1, Top=1, Right=10, Bottom=2(第 2~3 行、第 2~11 欄),目的地 (0,5)(第 6 行第 1 欄)。
| 裁剪區域 | 觀察現象 | 結論 |
|---|---|---|
| NULL(全緩衝區) | 捲動區域移動,原處被填充字元覆蓋,目的地覆蓋原有內容 | 全域受影響 |
| 等於捲動區域 | 捲動區域「複製」到目的地,原處**不**被填充,目的地覆蓋 | 裁剪區外不變,裁剪區內視為可覆蓋 |
| 捲動區域向下 1 列 | 捲動區域內容下移 1 列,底部 1 列被填充,頂部 1 列保留 | 裁剪區決定「受保護邊界」 |
| 裁剪區縮小為捲動區上半部 | 上半部被填充,下半部內容移走後不填充 | 裁剪區外完全不受影響 |
lpClipRectangle=NULL)HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbi;
GetConsoleScreenBufferInfo(hOut, &csbi);
SMALL_RECT scroll = {1, 1, 10, 2};
COORD dest = {0, 5};
CHAR_INFO fill = {' ', csbi.wAttributes};
ScrollConsoleScreenBuffer(hOut, &scroll, NULL, dest, &fill);