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

Windows 控制台文字屬性設置:SetConsoleTextAttribute 完整指南

     編輯:關於C語言

API 定義

BOOL SetConsoleTextAttribute(
    HANDLE hConsoleOutput,  // 標準輸出控制代碼
    WORD wAttributes        // 文字屬性(前景/背景色等)
);

屬性值組合

`wAttributes` 由前景色、背景色、亮度位組合而成(位掩碼):

前景色(低 4 位)

常數值顏色
FOREGROUND_BLUE0x0001藍
FOREGROUND_GREEN0x0002綠
FOREGROUND_RED0x0004紅
FOREGROUND_INTENSITY0x0008高亮(加亮)

背景色(高 4 位)

常數值顏色
BACKGROUND_BLUE0x0010藍
BACKGROUND_GREEN0x0020綠
BACKGROUND_RED0x0040紅
BACKGROUND_INTENSITY0x0080高亮背景

常用組合範例


// 白字黑底(預設)
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE

// 亮紅字藍底
FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE

// 黃字(紅+綠)黑底
FOREGROUND_RED | FOREGROUND_GREEN

// 亮白字深藍底
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY |
BACKGROUND_BLUE

完整範例程式

#include <stdio.h>
#include <windows.h>

void printColorful(const char* text, WORD attr) {
    HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
    SetConsoleTextAttribute(hOut, attr);
    printf("%s", text);
    // 恢復預設屬性
    SetConsoleTextAttribute(hOut, FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}

int main() {
    printColorful("錯誤: ", FOREGROUND_RED | FOREGROUND_INTENSITY);
    printf("檔案不存在\n");
    
    printColorful("警告: ", FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("磁碟空間不足\n");
    
    printColorful("成功: ", FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("操作完成\n");
    
    printColorful("資訊: ", FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
    printf("正在連線...\n");
    
    return 0;
}

進階技巧

  1. 保存/恢復屬性:使用 `GetConsoleScreenBufferInfo` 取得 `csbi.wAttributes` 保存現狀,輸出後恢復
  2. 區域著色:搭配 `SetConsoleCursorPosition` 實現局部文字著色
  3. 跨平台考量:Windows 專用;Linux/macOS 使用 ANSI 轉義序列(`\033[31m` 等)

常見問題

  • 屬性設定後對後續所有 `printf`/`WriteConsole` 生效,需手動恢復
  • 背景色需配合 `system("cls")` 或填充空白才能看見完整效果
  • 某些終端機模擬器不支援背景高亮位

總結

`SetConsoleTextAttribute` 是控制台文字著色的核心 API。掌握前景/背景 RGB 位組合與亮度位,即可實現豐富的彩色文字輸出,大幅提升控制台程式的可讀性與使用者體驗。

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