Share via


捲動螢幕緩衝區

重要

本文件說明已不再是生態系統 藍圖一部分的控制台平臺功能。 我們不建議您在新產品中使用此內容,但我們將繼續支持無限期的未來現有使用量。 我們慣用的新式解決方案著重於 虛擬終端機序列 ,以在跨平臺案例中達到最大相容性。 您可以在傳統 主控台與虛擬終端機 檔中找到此設計決策的詳細資訊。

控制台視窗會顯示使用中畫面緩衝區的一部分。 每個螢幕緩衝區都會維護自己的目前視窗矩形,以指定要顯示在控制台視窗中的左上方和右下角字元單元格的座標。 若要判斷螢幕緩衝區的目前視窗矩形,請使用 GetConsoleScreenBufferInfo 建立螢幕緩衝區時,其視窗的左上角位於控制台畫面緩衝區的左上角(0,0)。

視窗矩形可以變更以顯示主控台畫面緩衝區的不同部分。 在下列情況下,螢幕緩衝區的視窗矩形可能會變更:

  • 呼叫 SetConsoleWindowInfo 以指定新的視窗矩形時,它會藉由變更視窗矩形的位置而不變更視窗大小,來捲動控制台畫面緩衝區的檢視。 如需捲動視窗內容的範例,請參閱 卷動螢幕緩衝區的視窗

    screen buffer window panning around large buffer of content

  • 使用 WriteFile 函式寫入螢幕緩衝區時,啟用行尾 (EOL) 輸出模式包裝時,視窗矩形會自動移動,因此一律會顯示游標。

  • 當 SetConsoleCursorPosition 函式指定位於目前視窗矩形界限外的新游標位置時,視窗矩形會自動移動以顯示游標。

  • 當使用者變更控制台視窗的大小或使用視窗滾動條時,活動畫面緩衝區的視窗矩形可能會變更。 此變更不會回報為輸入緩衝區中的視窗重設大小事件。

在這些情況中,視窗矩形會移位以顯示主控台畫面緩衝區的不同部分,但控制台畫面緩衝區的內容會維持在相同的位置。 下列情況可能會導致主控台畫面緩衝區的內容轉移:

  • 呼叫 ScrollConsoleScreenBuffer 函式時,會將矩形區塊從螢幕緩衝區的某個部分複製到另一個部分。
  • 使用 WriteFile 在啟用 EOL 輸出模式換行的畫面緩衝區時,控制台畫面緩衝區的內容會在遇到控制台畫面緩衝區結尾時自動捲動。 此卷動會捨棄主控台畫面緩衝區的頂端數據列。

ScrollConsoleScreenBuffer 會指定已移動的控制台畫面緩衝區矩形,以及複製矩形的新左上方座標。 此函式可以捲動控制台畫面緩衝區的部分或整個內容。

此圖顯示 ScrollConsoleScreenBuffer 作業,該作業會將控制台畫面緩衝區的整個內容向上捲動數個數據列。 會捨棄頂端數據列的內容,而底部數據列會填入指定的字元和色彩。

screen buffer window scrolling content off top to discard

ScrollConsoleScreenBuffer 的效果可以藉由指定選擇性裁剪矩形來限制,讓裁剪矩形外部控制台畫面緩衝區的內容保持不變。 裁剪的效果是建立子視窗(裁剪矩形),其內容會捲動,而不會影響控制台畫面緩衝區的其餘部分。 如需使用 ScrollConsoleScreenBuffer 的範例,請參閱 卷動螢幕緩衝區的內容