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

Windows Console 文字移動與捲動機制深度解析

     編輯:關於C

核心 API:ScrollConsoleScreenBuffer

BOOL ScrollConsoleScreenBuffer(
    HANDLE hConsoleOutput,           // 主控台輸出控制代碼
    const SMALL_RECT *lpScrollRect,  // 移動來源矩形區域
    const SMALL_RECT *lpClipRect,    // 裁剪矩形(NULL=整個緩衝區)
    COORD dwDestinationOrigin,       // 目標左上角座標
    const CHAR_INFO *lpFill          // 空出區域填充字元屬性
);

參數關係與行為實驗

實驗基礎:主控台輸出 4 行文字(0/1/2/3 行),來源區域 scroll = {Left=1, Top=1, Right=10, Bottom=2}(即第 1-2 行第 1-10 字元),目標位置 {0,5}。

實驗 1:lpClipRect = NULL(預設整個緩衝區)

  • 來源區域文字移動到目標位置
  • 來源原位置被填充字元覆蓋
  • 裁剪區外(第 0、3 行)完全不受影響

實驗 2:lpClipRect = &scroll(裁剪區=來源區)

  • 來源區域移動後,原位置被填充字元覆蓋
  • 目標區域若超出裁剪區,**不會**被覆蓋(保持原樣)
  • 裁剪區外內容完全凍結

實驗 3:裁剪區=來源區,目標位置僅下移 1 行

  • 來源區域內容向下平移 1 行
  • 最底行被填充字元覆蓋,最頂行騰空
  • 實現區域內「捲動」效果

實驗 4:裁剪區=整個緩衝區,目標下移 1 行

  • 整個緩衝區內容向下平移
  • 最底行被填充,最頂行騰空
  • 完整畫面捲動

實驗 5:裁剪區=來源區上半部,目標下移 1 行

  • 裁剪區內上半部內容下移,下半部不動
  • 來源區域下半部(未被裁剪)保持原位,**不會**被移動內容覆蓋
  • 證明:裁剪區外完全免疫移動操作

核心結論歸納

區域受移動影響?原位置變化目標位置變化
裁剪區外否凍結不變不被覆蓋
裁剪區內是被填充字元覆蓋被移動內容覆蓋

應用場景: 實現主控台文字編輯器捲動、遊戲畫面捲動、日誌即時顯示區域更新等。精確控制 lpClipRect 可實現局部捲動而不干擾 UI 其他部分(如標題列、狀態列)。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved