C++ 设置字体背景色

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,不用设置那么多东西。