BOOL SetConsoleTextAttribute(
HANDLE hConsoleOutput, // 標準輸出控制代碼
WORD wAttributes // 文字屬性(前景/背景色等)
);
`wAttributes` 由前景色、背景色、亮度位組合而成(位掩碼):
| 常數 | 值 | 顏色 |
|---|---|---|
| FOREGROUND_BLUE | 0x0001 | 藍 |
| FOREGROUND_GREEN | 0x0002 | 綠 |
| FOREGROUND_RED | 0x0004 | 紅 |
| FOREGROUND_INTENSITY | 0x0008 | 高亮(加亮) |
| 常數 | 值 | 顏色 |
|---|---|---|
| BACKGROUND_BLUE | 0x0010 | 藍 |
| BACKGROUND_GREEN | 0x0020 | 綠 |
| BACKGROUND_RED | 0x0040 | 紅 |
| BACKGROUND_INTENSITY | 0x0080 | 高亮背景 |
// 白字黑底(預設)
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;
}
`SetConsoleTextAttribute` 是控制台文字著色的核心 API。掌握前景/背景 RGB 位組合與亮度位,即可實現豐富的彩色文字輸出,大幅提升控制台程式的可讀性與使用者體驗。