編譯后彈出的黑框框(exe 可執(zhí)行文件)總是黑底白字,在做實(shí)踐大作業(yè)時(shí)想到嘗試改變字體的顏色與背景色,搜索發(fā)現(xiàn)有system和SetConsoleTextAttribute兩個(gè)函數(shù),各有長(zhǎng)處,詳細(xì)了解一下,為了以后的使用。
操作平臺(tái):Microsoft Visual Studio 2019?
[content]
system函數(shù) (Windows系統(tǒng))
函數(shù)功能
函數(shù)原型 (注:指令大小寫(xiě)均可)
函數(shù)參數(shù)規(guī)定
函數(shù)缺點(diǎn)
示例程序(system函數(shù))
SetConsoleTextAttribute函數(shù)??
函數(shù)頭文件?
函數(shù)功能?
函數(shù)原型
函數(shù)參數(shù)?
示例程序(SetConsoleTextAttribute函數(shù))
system函數(shù) (Windows系統(tǒng))
?系統(tǒng)函數(shù),不用引其他的頭文件
函數(shù)功能
發(fā)出一個(gè)DOS命令
- DOS命令——指DOS操作系統(tǒng)的命令,是一種面向磁盤(pán)的操作命令,主要包括目錄操作類命令、磁盤(pán)操作類命令、文件操作類命令和其它命令。
?調(diào)用color函數(shù)可以改變控制臺(tái)的前景色和背景從而達(dá)到我們的目的,即設(shè)置默認(rèn)的控制臺(tái)前景和背景顏色。(還有以下功能舉例);
- system("pause")可以實(shí)現(xiàn)凍結(jié)屏幕,便于觀察程序的執(zhí)行結(jié)果;
- system("CLS")可以實(shí)現(xiàn)清屏操作。(清屏后原數(shù)據(jù)不會(huì)被清除)
函數(shù)原型 (注:指令大小寫(xiě)均可)
//system函數(shù)原型
int system(const char *command);
//system實(shí)現(xiàn)color功能的函數(shù)定義語(yǔ)句
system("color 01"); //設(shè)置背景為黑色,字體為藍(lán)色
函數(shù)參數(shù)規(guī)定
由函數(shù)原型可知system函數(shù)的參數(shù)為const char*類型,則使用時(shí)注意
- 【對(duì)于system函數(shù)而言】要在system的()內(nèi)加""
- 【對(duì)于color函數(shù)而言】在""內(nèi)color與所需輸入的顏色屬性中間用空格隔開(kāi),不能用逗號(hào),也不能直接輸入而不隔開(kāi)
錯(cuò)誤輸入?yún)?shù)時(shí)會(huì)出現(xiàn)的情況:
- 直接輸入system("colorf4");而不隔開(kāi)時(shí)會(huì)出現(xiàn)如下:
- 用逗號(hào)時(shí)會(huì)出現(xiàn)system(“color ”)的功能及使用方式;??
COLOR? [attr]
/*attr ? 指定控制臺(tái)輸出的顏色屬性*/
示例: "COLOR fc" 在亮白色上產(chǎn)生淡紅色(即背景為白色,字體為紅色)
//應(yīng)用示例
system("color f4"); //紅字白底
顏色屬性由兩個(gè)十六進(jìn)制數(shù)字指定——第一個(gè)對(duì)應(yīng)于背景,第二個(gè)對(duì)應(yīng)于前景(字體)。
每個(gè)數(shù)字可以為以下任何值(淡色與原色相差不大,但是試的時(shí)候仔細(xì)觀察一下亮度的確還是有差距的,大小寫(xiě)均可)
? 0 = 黑色 ? ? ? 8 = 灰色
1 = 藍(lán)色? ? ?? 9 = 淡藍(lán)色
2 = 綠色? ? ? ?A = 淡綠色
? 3 = 淺綠? ? ? ?B = 淡淺綠色
? 4 = 紅色? ? ? ?C = 淡紅色
? 5 = 紫色 ? ? ? D = 淡紫色
? 6 = 黃色 ? ? ? E = 淡黃色
? 7 = 白色 ? ? ? F = 亮白色
特別注意:?
①如果最初使用system("color")時(shí)沒(méi)有給定任何參數(shù)(此處的參數(shù)是指attr,即顏色屬性),此命令會(huì)將顏色還原到 CMD.EXE 啟動(dòng)時(shí)的顏色(即仍是原始的黑底白字)(這個(gè)值來(lái)自當(dāng)前控制臺(tái)窗口、/T 命令行開(kāi)關(guān)或 DefaultColor 注冊(cè)表值。);
②若在最后想把控制臺(tái)還原到最初的黑底白字,不給參數(shù)是無(wú)法實(shí)現(xiàn)這一功能的,只能使用?system("color 07");?還原到黑底白字,在最后使用system("color")不給參數(shù)是無(wú)法實(shí)現(xiàn)把顏色還原到黑底白字的;
③如果嘗試使用相同的前景和背景顏色來(lái)執(zhí)行COLOR 命令,COLOR 命令會(huì)將 ERRORLEVEL 設(shè)置為 1(即仍是黑底白字)。
函數(shù)缺點(diǎn)
運(yùn)行下面示例程序會(huì)發(fā)現(xiàn),system函數(shù)加上color函數(shù)這個(gè)指令后可以對(duì)控制臺(tái)文本屬性進(jìn)行改變,但是一改變就是整個(gè)控制臺(tái)發(fā)生變化,只能把控制臺(tái)改成一種顏色,無(wú)法達(dá)到我們想要指定一行的文本發(fā)生顏色改變(即改成多種顏色)的效果,因此,有下面SetConsoleTextAttribute函數(shù),這個(gè)函數(shù)更加靈活。
示例程序(system函數(shù))
#include<iostream>
using namespace std;
int main() {
string q; //設(shè)置一個(gè)值便于觀察顏色變化
system("COLOR f9"); //此處大寫(xiě),設(shè)置為白底藍(lán)字
cout << "hello" << endl;
cout << "觀察中:";
cin >> q;
cout << endl;
system("color 05"); //此處小寫(xiě),設(shè)置為黑底紫字
cout << "hello" << endl;
cout << "觀察中:";
cin >> q;
cout << endl;
system("cls"); //試用system函數(shù)的其他指令提供的功能,也可以把這一行注釋掉
cout << endl << "查看cls清屏后是否還能查看剛剛輸入的數(shù)據(jù)" << endl << "輸入的觀察值為 q = " << q << endl;
system("color 07"); //還原為最初顏色,黑底白字
cout << endl << "觀察結(jié)束,隨便輸入啦:";
cin >> q;
return 0;
}
SetConsoleTextAttribute函數(shù)??
函數(shù)頭文件?
#include<Windows.h>
函數(shù)功能?
設(shè)置控制臺(tái)文本屬性
函數(shù)原型
BOOL SetConsoleTextAttribute( ? ? ? HANDLE hConsoleOutput, ? ? WORD ??wAttributes );?
函數(shù)參數(shù)?
hConsoleOutput??——?控制臺(tái)屏幕緩沖區(qū)的句柄
這里我們引入GetSTDHandle函數(shù)來(lái)作為參數(shù)?
?GetStdHandle(nStdHandle)是返回標(biāo)準(zhǔn)的輸入、輸出或錯(cuò)誤的設(shè)備的句柄,也就是獲得輸入、輸出/錯(cuò)誤的屏幕緩沖區(qū)的句柄。
nStdHandle的值 | 含義 |
---|---|
STD_INPUT_HANDLE | 標(biāo)準(zhǔn)輸入的句柄 |
STD_OUTPUT_HANDLE | 標(biāo)準(zhǔn)輸出的句柄 |
STD_ERROR_HANDLE | 標(biāo)準(zhǔn)錯(cuò)誤的句柄 |
?wAttributes??——?字符屬性,包括顏色和?DBCS?(點(diǎn)擊查詢DBCS雙字節(jié)字符)
Attribute | 含義 | 對(duì)應(yīng)數(shù)字 |
---|---|---|
FOREGROUND_BLUE | 文本顏色包含藍(lán)色。 | 1 |
FOREGROUND_GREEN | 文本顏色包含綠色。 | 2 |
FOREGROUND_RED | 文本顏色包含紅色。 | 4 |
FOREGROUND_INTENSITY | 文本顏色增強(qiáng) | 8 |
BACKGROUND_BLUE | 背景色包含藍(lán)色。 | 16 |
BACKGROUND_GREEN | 背景色包含綠色。 | 32 |
BACKGROUND_RED | 背景色包含紅色。 | 64 |
BACKGROUND_INTENSITY | 背景色增強(qiáng)。 | 128 |
COMMON_LVB_LEADING_BYTE | 前導(dǎo)字節(jié)。 | \ |
COMMON_LVB_TRAILING_BYTE | 尾隨字節(jié)。 | \ |
COMMON_LVB_GRID_HORIZONTAL | 頂部水平。 | \ |
COMMON_LVB_GRID_LVERTICAL | 左垂直。 | \ |
COMMON_LVB_GRID_RVERTICAL | 右垂直。 | \ |
COMMON_LVB_REVERSE_VIDEO | 反轉(zhuǎn)前景和背景屬性。 | \ |
COMMON_LVB_UNDERSCORE | 下劃線。 | \ |
前景屬性指定文本顏色;?背景屬性指定用于填充單元格背景的顏色;?其他屬性與?DBCS?一起使用。
應(yīng)用程序可以將前景常量和背景常量組合起來(lái)以實(shí)現(xiàn)不同的顏色,這個(gè)時(shí)候考察的就是繪畫(huà)能力啦(紅色+綠色= 黃色 ps:可以加高亮哦),使用 | 符號(hào)。
例如,以下組合實(shí)現(xiàn):藍(lán)色背景上的亮青色文本。
FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE
如果沒(méi)有指定背景常量,則背景為黑色,如果沒(méi)有指定前景常量,則文本為黑色。
例如,以下組合實(shí)現(xiàn):白色背景上的黑色文本。 為背景指定了紅色、綠色和藍(lán)色,它們組合成白色背景。 沒(méi)有為前景指定標(biāo)志顏色,因此它為黑色。
BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED
更多詳情見(jiàn):??控制臺(tái)屏幕緩沖區(qū)
?【注】關(guān)于wAttributes?字符屬性參數(shù)的寫(xiě)法有三種,如下:
//BACKGROUND代表背景,F(xiàn)OREGROUND代表前景
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);//設(shè)置黃色(紅色+綠色)
//十六進(jìn)制數(shù)字
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x04); //紅色
//十進(jìn)制數(shù)字
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2); //綠色
示例程序(SetConsoleTextAttribute函數(shù))
#include<Windows.h>
int main() {
cout << "Hello ——this is the prime color" << endl;
cout << "先來(lái)看一哈青色的字兒:";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//設(shè)置青色
cout << endl << "Hello World!" << endl;
string q;
cout << "來(lái)嘗試隨便輸入一下吧(給你一個(gè)藍(lán)底白字):";
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); //設(shè)置藍(lán)底白字
cin >> q;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);//沒(méi)有給其他顏色,只給了文本增強(qiáng),只有亮度稍微改變一下
cout <<endl<< "zai隨便輸入一下吧" << endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);//設(shè)置白色
cin >> q;
cout << endl << "自己嘗試一下,寫(xiě)著玩兒叭,拜拜咯——" << endl;
return 0;
}
?文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-457328.html文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-457328.html
?
到了這里,關(guān)于【c++】設(shè)置控制臺(tái)窗口字體顏色和背景色(system和SetConsoleTextAttribute函數(shù) )的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!