首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> C語言 >> 關於C語言

Windows Console 文字捲動技術:ScrollConsoleScreenBuffer 完整參數解析與實驗驗證

     編輯:關於C語言

API 簽名

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 列保留裁剪區決定「受保護邊界」
裁剪區縮小為捲動區上半部上半部被填充,下半部內容移走後不填充裁剪區外完全不受影響

歸納規律

  1. 裁剪區外:完全凍結,不移動、不填充、不被覆蓋
  2. 裁剪區內:完全受捲動影響——移走處被填充,移入處被覆蓋

應用場景

  • 終端機捲動緩衝區實現(lpClipRectangle=NULL)
  • 局部 UI 更新(設定裁剪區 = UI 區域,避免影響標題列/狀態列)
  • 文字動畫、進度條、選單高亮移動

範例程式碼

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);
  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved