如何在控制台中更改以前打印的文本的颜色?

How to change colour of previously printed text in the console?

本文关键字:打印 文本 颜色 控制台      更新时间:2023-10-16

我目前有改变颜色的基本功能

void setColour(short colour){
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon, colour);
}
setColour(10);
//Previous text to be highlighted?
setColour(7); //Sets colour to default console colour

使用它用于以不同的颜色打印新文本,但我目前正在创建一个游戏,需要突出显示已经打印的文本。我知道这是可以做到的,但我不知道怎么做。

一种方法是删除当前文本并重新打印相同的文本,无论如何,今天的系统都闪电很快,所以你不会发现区别。

为此,我们使用 \r

cout << "something" << 'r' << flush.
">
  • \r"表示"回车",它将转到行首。

  • ">
  • 冲洗"的意思是"确保我刚刚打印的内容现在到达输出。

在此之后,使用您选择的颜色重新打印相同的文本。

注意:这发生得如此之快,您会觉得文本改变了颜色。

正如其他人所说,您需要以不同的颜色重新打印相同的文本才能"更改"颜色。

但是,考虑到您正在使用 Win32 控制台,我认为更建议依赖依赖于平台的代码 -> 在 Win32 控制台应用程序中设置光标位置

移动光标可以更直接地控制要实现的目标(在控制台中重新/覆盖已打印的文本)。

另一个答案提到将'r'打印到控制台确实有效,但仅适用于当前行,因为移动光标可以让您自由地"更改"控制台整个缓冲区中的任何字符。

另一方面,正如您已经提到的,还有system("cls"),人们可能会认为这是一种更"独立于平台"的方式,但与直接控制相比,它非常慢(并且有点黑客),所以我强烈建议不要使用它。(如果你想知道为什么,请参阅系统("暂停"); - 为什么是错的?,授予它不是相同的命令,但相同的原则适用)