更改控制台颜色并保持输出为C ++

时间:2017-04-17 22:41:40

标签: c++ windows cmd

我需要创建一个类似于Window的CMD的CLI。要制作颜色命令,我使用rlutil.h中的函数rlutil::setColorrlutil::setBackgroundColor。但是,要更改所有控制台中的颜色,我必须清除屏幕(rlutil::cls()),否则只会出现新输出,如图所示。

没有cls:

Without the cls

使用cls: Before the command After the first command - colors af

在cmd中(我使用@echo off来不显示当前目录): The same codes used in the cmd

这是我做的功能:

void colors(string value) {//I recive the user's input (like in the cmd)
    char foo[3];//I save each character in this array
    int c_text = 0, c_bg = 0;//Variables to get the numeric value of each character
    if(value.length() == 2) {//This is to only accept 2 characters as parameter for the command
        strcpy(foo, value.c_str());//Copy the values of the string in the array
        c_bg= chartoHEX(foo[0]);//Take the int value of each character 
        //(if the parameter in chartoHEX is '0', returns 0, if it's 'A', returns 10, and so on)
        c_text = chartoHEX(foo[1]);
        //If the function returns -1 means that the parameter wasn't an HEX number
        if(c_text != -1 && c_bg != -1) {
            rlutil::setColor(c_text);//Changes the text color
            rlutil::setBackgroundColor(c_bg);//Changes the background color
        }
    }
}

当我调用该函数时:

colors("0a");
rlutil::cls();
cout << "C:\\Users\\Raven>";

如何在更改颜色后保留输出?

1 个答案:

答案 0 :(得分:1)

如果使用低级本机Windows控制台功能,则可以更改颜色而不影响文本。使用GetStdHandle_get_osfhandle获取控制台句柄,然后调用WriteConsoleOutputAttribute