C/C++ 中怎樣使用SetConsoleTextAttribute()函數來控制輸出字符的顏色
當我們在命令行輸出字符的時候,會想著,要是能控制輸出字符的顏色就好瞭。
現在,滿足你,有這麼一個函數能夠幫助我們實現這個想法。
↓↓↓↓↓
SetConsoleTextAttribute();
依照慣例我們來看看這個函數的構成。
SetConsoleTextAttribute( _In_ HANDLE hConsoleOutput, _In_ WORD wAttributes );
HANDLE在上一篇博客中我們見過。註意在使用前,要先將其變為標準輸出句柄。
typedef void *HANDLE;//HANDLE是vodi*的重定義 HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);//獲取標準輸出句柄
現在我們主要來看一下WORD的定義。
typedef unsigned short WORD;
從上可以的除WORD其實是個無符號的整型,一般這樣的話,線索就好像是斷瞭,隻看數值的話隻能知道取值范圍是0-65535。
但是我們去網上搜索這個函數後,我們就發現瞭簡單的用法,這裡我來舉個例子:
#include <stdio.h> #include <windows.h> int main() { HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); // 獲取標準輸出句柄 SetConsoleTextAttribute(hOut, FOREGROUND_INTENSITY | FOREGROUND_BLUE);//字體設置為藍色 printf("R\n"); }
我們看到不僅我們輸出的字符”R”變成瞭藍色,且後面的自動彈出的提示也變成瞭藍色。
我們可以把輸出字符的命令當作是一支畫筆,而我們通過SetConsoleTextAttribute();改變瞭畫筆的顏色。//這裡提醒一下,直到下次更改前顏色會一直保持
而且我們可以看到,本來應該是填入WORD類型數據的地方,現在變成瞭”FOREGROUND_INTENSITY | FOREGROUND_BLUE”。
這是什麼東西呢,我們對它查看定義來看一下:
#define FOREGROUND_BLUE 0x0001 // text color contains blue. #define FOREGROUND_GREEN 0x0002 // text color contains green. #define FOREGROUND_RED 0x0004 // text color contains red. #define FOREGROUND_INTENSITY 0x0008 // text color is intensified. #define BACKGROUND_BLUE 0x0010 // background color contains blue. #define BACKGROUND_GREEN 0x0020 // background color contains green. #define BACKGROUND_RED 0x0040 // background color contains red. #define BACKGROUND_INTENSITY 0x0080 // background color is intensified.
從看到上的的註釋不難看出,這些函數是對一些十六位進制的值的宏定義。//0x代表這後面的數字是十六位進制
而且根據宏定義名可簡單的歸類:
前四個是對字體的 藍色,綠色,紅色,亮度 進行設置
後四個是對背景的 藍色,綠色,紅色,亮度 進行設置
相信機智的你已經看出來瞭,SetConsoleTextAttribute(HANDLE,WORD);其實是通過判斷WORD的二進制,其相對應位置上的值來開啟顏色屬性的。
(short是二字節,但是這裡方便書寫就寫一字節瞭)
對應屬性 | 藍色字體 | 綠色字體 | 紅色字體 | 高亮字體 | 藍色背景 | 綠色背景 | 紅色背景 | 高亮背景 |
---|---|---|---|---|---|---|---|---|
十進制 | 0x0001 | 0x0002 | 0x0004 | 0x0008 | 0x0010 | 0x0020 | 0x0040 | 0x0080 |
二進制 | 00000001 | 00000010 | 00000100 | 00001000 | 00010000 | 00100000 | 01000000 | 10000000 |
上訴例子裡的值也可以這麼轉換下來:
” FOREGROUND_INTENSITY|FOREGROUND_BLUE “—>” 0x0008|0x0001 “—>” 00001000|00000001 “
—>”00001001″
然後根據”00001001″查看,哦,開啟第一位和第四位的屬性,那麼也就是打開啟 藍色字體和高亮字體的屬性。
還有就是 這裡的紅綠藍其實就是三原色,經過通過 紅綠 紅藍 綠藍 還可得到 黃色 青色 粉色 這三種顏色。
//宏定義字體顏色 #define FOREGROUND_WHITE 0x0007 //白色(紅+綠+藍) 默認顏色 #define FOREGROUND_YELLOW 0x0006 //黃色(紅+綠) #define FOREGROUND_PINK 0x0005 //粉色(紅+藍) #define FOREGROUND_INDIGO 0x0003 //青色(綠+藍)
這裡我把混合的顏色寫上來,為瞭方便使用,可以在自己的代碼裡添加這個宏定義方便使用
到此這篇關於C/C++ 中怎樣使用SetConsoleTextAttribute()函數來控制輸出字符的顏色的文章就介紹到這瞭,更多相關C/C++控制輸出字符的顏色內容請搜索WalkonNet以前的文章或繼續瀏覽下面的相關文章希望大傢以後多多支持WalkonNet!
推薦閱讀:
- Python 打印自己設計的字體的實例講解
- C++實現俄羅斯方塊小遊戲
- C語言SetConsoleCursorPosition函數使用方法
- C++中SetConsoleCursorPosition()移動光標函數的用法大全
- C語言關於自定義數據類型之枚舉和聯合體詳解