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

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

我目前有基本的变色功能

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'表示"carriage return",它会转到行首。

  • 'flush' 表示“确保我刚刚打印的内容现在到达输出端。

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

注意: 这种情况发生得如此之快,您会觉得文字好像改变了颜色。

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

但是考虑到您使用的是 Win32 控制台,我认为更推荐依赖平台相关代码 -> Setting the Cursor Position in a Win32 Console Application

四处移动光标可以更直接地控制您想要实现的目标(re-/over-writing 已在控制台中打印文本)。

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

另一方面,正如您已经提到的,还有 system("cls") 有人可能会争辩说这是一种更 "platform-independent" 的方式,但相比之下它非常慢(有点老套)直接控制,所以我强烈建议不要使用它。 (如果您想知道为什么,请参阅 system("pause"); - Why is it wrong?,授予它不同的命令但适用相同的原则)