屏幕緩衝區是主控台視窗中輸出的二維字元和色彩資料陣列。 控制台可以有多個螢幕緩衝區。 使用中 畫面緩衝區 是顯示在畫面上的緩衝區。
每當系統建立新的控制台時,系統就會建立螢幕緩衝區。 若要開啟主控台使用中畫面緩衝區的句柄,請在呼叫 CreateFile 函式時指定 CONOUT$ 值。 進程可以使用 CreateConsoleScreenBuffer 函式為其控制台建立額外的螢幕緩衝區。 在 SetConsoleActiveScreenBuffer 函式的呼叫中指定新的畫面緩衝區之前,不會使用新的畫面緩衝區。 不過,您可以存取螢幕緩衝區來讀取和寫入它們是否為使用中或非使用中。
每個螢幕緩衝區都有自己的二維字元信息記錄陣列。 每個字元的數據會儲存在 CHAR_INFO 結構中,該結構會指定 Unicode 或 ANSI 字元,以及該字元顯示的前景和背景色彩。
您可以針對每個螢幕緩衝區獨立設定與螢幕緩衝區相關聯的許多屬性。 這表示變更作用中的螢幕緩衝區可能會對控制台視窗的外觀產生戲劇性的影響。 與螢幕緩衝區相關聯的屬性包括:
- 屏幕緩衝區大小,以字元列和數據行為單位。
- 文字屬性(用於顯示 WriteFile 或 WriteConsole 函式所寫入之文字的前景和背景色彩)。
- 視窗大小和位置(控制台視窗中顯示的控制台畫面緩衝區矩形區域)。
- 游標位置、外觀和可見性。
- 輸出模式(ENABLE_PROCESSED_OUTPUT 和 ENABLE_WRAP_AT_EOL_OUTPUT)。 如需主控台輸出模式的詳細資訊,請參閱 主控台模式High-Level。
建立螢幕緩衝區時,它會在每個位置包含空格符。 其游標是可見的,並定位在緩衝區的原點 (0,0),而視窗位於緩衝區原點的左上角。 控制台畫面緩衝區的大小、視窗大小、文字屬性和游標的外觀取決於使用者或系統預設值。 若要擷取與控制台畫面緩衝區相關聯之各種屬性的目前值,請使用 GetConsoleScreenBufferInfo、 GetConsoleCursorInfo 和 GetConsoleMode 函式。
變更任何控制台畫面緩衝區屬性的應用程式應該建立自己的螢幕緩衝區,或在啟動期間儲存繼承螢幕緩衝區的狀態,並在結束時還原它。 需要這種合作行為,以確保共用相同控制台會話的其他應用程式不會受到變更的影響。
小提示
建議您盡可能使用 替代緩衝區模式 ,而不是為此目的建立第二個螢幕緩衝區。 替代緩衝區模式 提供跨遠端裝置和其他平臺增加的相容性。 如需詳細資訊,請參閱有關 傳統控制台 API 與虛擬終端 機的討論。
游標外觀和位置
屏幕緩衝區的游標可以看見或隱藏。 可見時,其外觀可能會有所不同,範圍從完全填滿字元單元格到顯示為儲存格底部的水平線不等。 若要擷取數據指標外觀和可見性的相關信息,請使用 GetConsoleCursorInfo 函式。 此函式會報告數據指標是否可見,並將游標的外觀描述為所填入之字元儲存格的百分比。 若要設定游標的外觀和可見性,請使用 SetConsoleCursorInfo 函式。
高階控制台 I/O 函式所撰寫的字元會寫入目前數據指標位置,並將游標前進到下一個位置。 若要判斷螢幕緩衝區座標系統中目前的游標位置,請使用 GetConsoleScreenBufferInfo。 您可以使用 SetConsoleCursorPosition 來設定游標位置,藉此控制高階 I/O 函式所寫入或回應的文字位置。 如果您移動游標,則會覆寫位於新游標位置的文字。
備註
不建議使用低階函式來尋找游標位置。 如果進階版面配置需要,建議使用 虛擬終端機序列 來查詢這個位置。 如需偏好虛擬終端機序列的詳細資訊,請參閱 傳統函式與虛擬終端機 檔。
游標的位置、外觀和可見性會針對每個螢幕緩衝區個別設定。
字元屬性
字元屬性可以分成兩個類別:color 和 DBCS。 標頭檔案中 WinCon.h 定義了下列屬性。
| 屬性 | 意義 |
|---|---|
| FOREGROUND_BLUE | 文字色彩包含藍色。 |
| FOREGROUND_GREEN | 文字色彩包含綠色。 |
| FOREGROUND_RED | 文字色彩包含紅色。 |
| FOREGROUND_INTENSITY | 文字色彩會加緊。 |
| BACKGROUND_BLUE | 背景色彩包含藍色。 |
| BACKGROUND_GREEN | 背景色彩包含綠色。 |
| BACKGROUND_RED | 背景色彩包含紅色。 |
| BACKGROUND_INTENSITY | 背景色彩會加緊。 |
| COMMON_LVB_LEADING_BYTE | 前置位元組。 |
| COMMON_LVB_TRAILING_BYTE | 尾端位元組。 |
| COMMON_LVB_GRID_HORIZONTAL | 上方水準。 |
| COMMON_LVB_GRID_LVERTICAL | 左垂直。 |
| COMMON_LVB_GRID_RVERTICAL | 右垂直。 |
| COMMON_LVB_REVERSE_VIDEO | 反向前景和背景屬性。 |
| COMMON_LVB_UNDERSCORE | 強調。 |
前景屬性會指定文字色彩。 背景屬性會指定用來填滿儲存格背景的色彩。 其他屬性會與 DBCS 搭配使用。
應用程式可以結合前景和背景常數,以達到不同的色彩。 例如,下列組合會在藍色背景上產生明亮的青色文字。
FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE
如果未指定背景常數,背景為黑色,如果未指定前景常數,則文字為黑色。 例如,下列組合會在白色背景上產生黑色文字。 紅色、綠色和藍色會針對結合成白色背景的背景指定。 前景未指定旗標色彩,因此為黑色。
BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED
每個螢幕緩衝區字元數據格都會儲存用於繪製該儲存格前景(文字)和背景之色彩的色彩屬性。 應用程式可以個別設定每個字元數據格的色彩數據,並將數據儲存在每個數據格之 CHAR_INFO 結構的 Attributes 成員中。 每個螢幕緩衝區的目前文字屬性會用於後續由高階函式寫入或回應的字元。
應用程式可以使用 GetConsoleScreenBufferInfo 來判斷螢幕緩衝區的目前文字屬性,以及 SetConsoleTextAttribute 函式來設定字元屬性。 變更螢幕緩衝區的屬性不會影響先前寫入的字元顯示。 這些文字屬性不會影響低階控制台 I/O 函式所寫入的字元(例如 WriteConsoleOutput 或 WriteConsoleOutputCharacter函 式),這些函式會明確指定寫入或保留屬性的每個單元格的屬性。
備註
不建議使用低階函式來作預設和特定文字屬性。 建議使用 虛擬終端機序列 來設定文字屬性。 如需偏好虛擬終端機序列的詳細資訊,請參閱 傳統函式與虛擬終端機 檔。
字型屬性
GetCurrentConsoleFont 函式會擷取目前控制台字型的相關信息。 儲存在 CONSOLE_FONT_INFO 結構中的資訊包括字型中每個字元的寬度和高度。
GetConsoleFontSize 函式會擷取指定主控台畫面緩衝區所使用的字型大小。
備註
不建議使用函式來尋找及作字型資訊。 建議以字型中性方式作命令行應用程式,以確保跨平臺相容性,以及與可讓使用者自定義字型的主機環境相容。 如需使用者喜好設定和主機環境的詳細資訊,包括終端機,請參閱 生態系統藍圖。