C++之如何設(shè)置字體顏色
方法一:system(“color”)
system函數(shù)想必大家都聽(tīng)說(shuō)過(guò),它可以用來(lái)設(shè)置字體的顏色,只需要在color后加上字體的背景色和前景色,
取值如下:
| 符號(hào) | 表示顏色 | 符號(hào) | 表示顏色 |
|---|---|---|---|
| 0 | 黑色 | 8 | 灰色 |
| 1 | 藍(lán)色 | 9 | 淡藍(lán)色 |
| 2 | 綠色 | A | 淡綠色 |
| 3 | 淺綠色 | B | 淡淺綠色 |
| 4 | 紅色 | C | 淡紅色 |
| 5 | 紫色 | D | 淡紫色 |
| 6 | 黃色 | E | 淡黃色 |
| 7 | 白色 | F | 亮白色 |
接下來(lái),我們就可以通過(guò)system("color")設(shè)置字體顏色了,
下面的代碼就可以將字體設(shè)為白底黑字:
#include <bits/stdc++.h>
using namespace std;
int main() {
system("color F0");
cout<<"hello"<<endl;
return 0;
}方法二:SetConsoleTextAttribute
在使用system("color")的時(shí)候,你會(huì)發(fā)現(xiàn),一旦使用該函數(shù),整個(gè)窗口都會(huì)被改變顏色。
那么如何設(shè)置單個(gè)字的顏色呢?
這就要用到SetConsoleTextAttribute函數(shù)了,他需要頭文件<windows.h>。
void SetColorAndBackground(int ForgC, int BackC) {
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}SetConsoleTextAttribute實(shí)際上需要混合顏色的,但為了方便使用 ,我們將他轉(zhuǎn)換成以上函數(shù),ForgC表示前景色,取值范圍從1~15,BackC表示背景色,取值也是1~15。
我們就來(lái)做一個(gè)簡(jiǎn)單的測(cè)試:
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
void SetColorAndBackground(int ForgC, int BackC) {
WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F);
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), wColor);
}
int main() {
SetColorAndBackground(15,0);
cout<<"hello"<<endl;
SetColorAndBackground(7,4);
cout<<"hello"<<endl;
return 0;
}
方法三:ANSI轉(zhuǎn)義序列
學(xué)習(xí)了SetConsoleTextAttribute函數(shù),你會(huì)發(fā)現(xiàn),SetConsoleTextAttribute中只有16種顏色,里面既沒(méi)有橘色也沒(méi)有棕色。
現(xiàn)在我們就來(lái)學(xué)習(xí)RGB顏色——ANSI,需要添加頭文件<windows>。
ANSI只適用于Windows10的用戶,其他版本不支持 詳見(jiàn)此處
void rgb_init() { // 初始化
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); //輸入句柄
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //輸出句柄
DWORD dwInMode, dwOutMode;
GetConsoleMode(hIn, &dwInMode); //獲取控制臺(tái)輸入模式
GetConsoleMode(hOut, &dwOutMode); //獲取控制臺(tái)輸出模式
dwInMode |= 0x0200; //更改
dwOutMode |= 0x0004;
SetConsoleMode(hIn, dwInMode); //設(shè)置控制臺(tái)輸入模式
SetConsoleMode(hOut, dwOutMode); //設(shè)置控制臺(tái)輸出模式
}
void rgb_set(int wr,int wg,int wb,int br,int bg,int bb) { //設(shè)置RGB
printf("\033[38;2;%d;%d;%dm\033[48;2;%d;%d;%dm",wr,wg,wb,br,bg,bb); //\033[38表示前景,\033[48表示背景,三個(gè)%d表示混合的數(shù)
}我們先來(lái)看一下代碼,rgb_init用來(lái)初始化ANSI(不然會(huì)亂碼),接下來(lái)用rgb_init設(shè)置字體RGB顏色即可。
現(xiàn)在就上完整代碼啦!
#include <bits/stdc++.h>
#include <windows.h>
using namespace std;
void rgb_init() { // 初始化
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE); //輸入句柄
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE); //輸出句柄
DWORD dwInMode, dwOutMode;
GetConsoleMode(hIn, &dwInMode); //獲取控制臺(tái)輸入模式
GetConsoleMode(hOut, &dwOutMode); //獲取控制臺(tái)輸出模式
dwInMode |= 0x0200; //更改
dwOutMode |= 0x0004;
SetConsoleMode(hIn, dwInMode); //設(shè)置控制臺(tái)輸入模式
SetConsoleMode(hOut, dwOutMode); //設(shè)置控制臺(tái)輸出模式
}
void rgb_set(int wr,int wg,int wb,int br,int bg,int bb) { //設(shè)置RGB
printf("\033[38;2;%d;%d;%dm\033[48;2;%d;%d;%dm",wr,wg,wb,br,bg,bb); //\033[38表示前景,\033[48表示背景,三個(gè)%d表示混合的數(shù)
}
int main() {
rgb_init();
rgb_set(255,255,255,123,146,70);
cout<<"hello"<<endl;
rgb_set(255,255,255,63,126,130);
cout<<"hello"<<endl;
rgb_set(255,255,255,1,186,200);
cout<<"hello"<<endl;
}
結(jié)束語(yǔ)
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
詳解C語(yǔ)言中telldir()函數(shù)和seekdir()函數(shù)的用法
這篇文章主要介紹了詳解C語(yǔ)言中telldir()函數(shù)和seekdir()函數(shù)的用法,是C語(yǔ)言入門(mén)學(xué)習(xí)中的基礎(chǔ)知識(shí),需要的朋友可以參考下2015-09-09
C/C++程序開(kāi)發(fā)中實(shí)現(xiàn)信息隱藏的三種類(lèi)型
這篇文章主要介紹了C/C++程序開(kāi)發(fā)中實(shí)現(xiàn)信息隱藏的三種類(lèi)型的相關(guān)資料,需要的朋友可以參考下2016-02-02
C++vector的insert函數(shù)用法小結(jié)
std::vector::insert是C++中用于在指定位置插入元素的函數(shù),支持插入單個(gè)元素、多個(gè)相同元素、一個(gè)范圍的元素或初始化列表中的元素,插入操作可能會(huì)使插入點(diǎn)之后的迭代器失效,并且時(shí)間復(fù)雜度為O(n),本文介紹C++vector的insert函數(shù)用法小結(jié),感興趣的朋友一起看看吧2025-03-03

