如何在控制台中更改以前打印的文本的颜色?
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"表示"回车",它将转到行首。
">冲洗"的意思是"确保我刚刚打印的内容现在到达输出。
在此之后,使用您选择的颜色重新打印相同的文本。
注意:这发生得如此之快,您会觉得文本改变了颜色。
正如其他人所说,您需要以不同的颜色重新打印相同的文本才能"更改"颜色。
但是,考虑到您正在使用 Win32 控制台,我认为更建议依赖依赖于平台的代码 -> 在 Win32 控制台应用程序中设置光标位置
移动光标可以更直接地控制要实现的目标(在控制台中重新/覆盖已打印的文本)。
另一个答案提到将'r'
打印到控制台确实有效,但仅适用于当前行,因为移动光标可以让您自由地"更改"控制台整个缓冲区中的任何字符。
另一方面,正如您已经提到的,还有system("cls")
,人们可能会认为这是一种更"独立于平台"的方式,但与直接控制相比,它非常慢(并且有点黑客),所以我强烈建议不要使用它。(如果你想知道为什么,请参阅系统("暂停"); - 为什么是错的?,授予它不是相同的命令,但相同的原则适用)
相关文章:
- 如何使代码打印文本文件中的第一行?
- 我想使用 "cout" 命令慢慢打印文本,但我真的找不到任何解决方案
- C++ 在带有回车符的终端中重新打印文本
- 打印文本导致内存泄漏
- 如何使用递归打印文本反驳
- 从 HDFS 读取和打印文本文件
- 在 C++ 中打印文本文件时出现问题
- WinAPI - 如何打印文本以编辑控件
- 打印文本文件c++的输出
- c 打印文本以for循环
- 在 dlib 窗口中打印文本
- 使用GLUT简单地打印文本
- Cout 不会打印文本而没有 endl 在循环中?
- 为什么它只打印文本文件的一个单词,而不是将整个文本文件打印到html文件中
- 在Windows C++中打印文本和变量
- 无法从文件打印文本
- Libharu pdf创建:如何知道打印文本的大小
- opengl在屏幕菜单上打印文本变量
- 在指针之间打印文本
- 如何在按下回车键后使用cout打印文本