我需要创建一个类似于Window的CMD的CLI。要制作颜色命令,我使用rlutil.h中的函数rlutil::setColor
和rlutil::setBackgroundColor
。但是,要更改所有控制台中的颜色,我必须清除屏幕(rlutil::cls()
),否则只会出现新输出,如图所示。
没有cls:
这是我做的功能:
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>";
如何在更改颜色后保留输出?
答案 0 :(得分:1)
如果使用低级本机Windows控制台功能,则可以更改颜色而不影响文本。使用GetStdHandle
或_get_osfhandle
获取控制台句柄,然后调用WriteConsoleOutputAttribute
。