在Windows控制台中使用自定义屏幕缓冲区(C ++)启用ANSI Color支持 [英] Enabling ANSI Color support in Windows console with custom screen buffer (C++)

查看:53
本文介绍了在Windows控制台中使用自定义屏幕缓冲区(C ++)启用ANSI Color支持的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我正在尝试通过 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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆