C++如何设置控制台字体背景色,要255*255*255种色彩的那种
system("color")和SetConsoleTextAttribute()都只有16种颜色。我现在知道设置字体前景色的方法,请问谁知道怎么设置背景色吗?
#include <stdio.h>
#include <wchar.h>
#include <windows.h>
int main() {
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
if (hOut == INVALID_HANDLE_VALUE)return GetLastError();
DWORD dwMode = 0;
if (!GetConsoleMode(hOut, &dwMode))return GetLastError();
dwMode |= 0x0004;
if (!SetConsoleMode(hOut, dwMode))return GetLastError();
for (int i = 0; i <= 255; i+=5) {
for (int j = 0; j <= 255; j+=5) {
for (int k = 0; k <= 255; k+=5) {
wprintf(L"\x1b[38;2;%d;%d;%dm@@@@@\t", i, j, k);
}
}
}
return 0;
}
▲设置字体前景颜色的方法
建议尝试通过GetConsoleMode和SetConsoleMode设置,给stdin对应句柄添加ENABLE_VIRTUAL_TERMINAL_INPUT属性,stdout和stderr对应句柄添加ENABLE_VIRTUAL_TERMINAL_PROCESSING,设置好后终端将会支持ANSI转义序列(ANSI escape sequence)。
#include <iostream>
#include <fstream>
#include <cstdio>
#include <cstdlib>
#include <cmath>
#include <algorithm>
#include <Windows.h>
using namespace std;
int main() {
HANDLE hIn = GetStdHandle(STD_INPUT_HANDLE);
HANDLE hOut = GetStdHandle(STD_OUTPUT_HANDLE);
DWORD dwInMode, dwOutMode;
GetConsoleMode(hIn, &dwInMode);
GetConsoleMode(hOut, &dwOutMode);
dwInMode |= ENABLE_VIRTUAL_TERMINAL_INPUT;
dwOutMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hIn, dwInMode);
SetConsoleMode(hOut, dwOutMode);
printf("\033[48;2;173;20;83mBackground is changed\033[0m\n");
return 0;
}
关于ANSI转义序列:https://blog.csdn.net/ScilogyHunter/article/details/106874395
这个方法基本上是跨平台的(只要目标平台支持VT-100终端转义语法),在linux下可以直接printf,不用设置那么多东西。