匿名用户__ 2021-03-13 22:21 采纳率: 0%
浏览 64

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;
}

▲设置字体前景颜色的方法

  • 写回答

1条回答 默认 最新

  • include_iostream_ 2021-03-13 22:38
    关注

    建议尝试通过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,不用设置那么多东西。

    评论

报告相同问题?