在Windows控制台中使用自定义屏幕缓冲区(C ++)启用ANSI Color支持 [英] Enabling ANSI Color support in Windows console with custom screen buffer (C++)
问题描述
我正在尝试通过 CreateConsoleScreenBuffer()
为创建的控制台屏幕缓冲区启用ANSI颜色支持.
I'm trying to enable ANSI color support for created console screen buffer via CreateConsoleScreenBuffer()
.
hConsole = CreateConsoleScreenBuffer(GENERIC_READ | GENERIC_WRITE, 0, NULL, CONSOLE_TEXTMODE_BUFFER, NULL);
DWORD dwMode = 0;
GetConsoleMode(hConsole, &dwMode);
dwMode |= ENABLE_EXTENDED_FLAGS;
SetConsoleMode(hConsole, dwMode);
dwMode = 0;
GetConsoleMode(hConsole, &dwMode);
dwMode |= ENABLE_VIRTUAL_TERMINAL_PROCESSING;
SetConsoleMode(hConsole, dwMode);
SetConsoleActiveScreenBuffer(hConsole);
SetConsoleMode()似乎什么都没做,我可以按预期将其写入缓冲区,但是如果我尝试编写任何ANSI Escape代码,则看起来像这样
It seems like SetConsoleMode() isn't doing anything, I can write it to buffer as I intended, but if I try to write any ANSI Escape codes, it looks like this
如果我不在由 CreateConsoleScreenBuffer()
创建的缓冲区中,则ANSI Escape代码按预期工作.
If I'm not in buffer created by CreateConsoleScreenBuffer()
, ANSI Escape codes are working as expected.
我在Windows 10上,19041.388;C ++ 14,MinGW-64编译器
I'm on Windows 10, 19041.388; C++14, MinGW-64 compiler
推荐答案
您可以使用:
#include <windows.h>
#include <iostream>
void Color(int color=0x07)
{
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
}
int main()
{
Color(0x0A/*Black bg green Fg*/);
std::cout << "Hello";
Color();
std::cout << ",";
Color(0xAC/*Green bg red Fg*/);
std::cout << "World";
Color(/*Black bg white Fg*/);
}
有关颜色的更多信息:
颜色属性由两个十六进制数字指定-第一个对应于背景;第二个前景.每个数字可以是以下任意值:
Color attributes are specified by TWO hex digits -- the first corresponds to the background; the second the foreground. Each digit can be any of the following values:
0 = Black 8 = Gray
1 = Blue 9 = Light Blue
2 = Green A = Light Green
3 = Aqua B = Light Aqua
4 = Red C = Light Red
5 = Purple D = Light Purple
6 = Yellow E = Light Yellow
7 = White F = Bright White
这篇关于在Windows控制台中使用自定义屏幕缓冲区(C ++)启用ANSI Color支持的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!