2017-04-09 36 views
0

我目前拥有的基本功能来改变颜色如何更改控制台中以前打印的文本的颜色?

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 

使用,这是用于打印不同的颜色我明白新的文本,但我目前正在创建一个游戏,需要文本强调的是,本已被打印。我知道这是可以做到的,但我不知道

+2

我不认为你可以改变已经书面文字的颜色。您可能可以删除旧文本并在其上写入新文本。 – gmoshkin

+0

寻找Windows的所有控制台功能。在DOS时代这是可能的,但我们会直接将彩色字节写入内存。 Windows控制台八九不离十模仿那些在旧屏幕模式,因此你可以烤颜色,但这种颜色与文字反正交错,所以它可能是最简单的,只是重新定位游标并重写的文本,MS可能没有暴露较低功能级别。 – paddy

回答

0

一种方式如何..就是删除当前的文本并重新打印相同的文字,总之系统今天点燃快,所以你不会做出来的差异。

要做到这一点,我们使用\ r

cout << "something" << '\r' << flush. 
  • 的 '\ r' 的意思是 “回车”,它会去行首。

  • 和“刷新”的意思是“确保我刚才印刷现在达到输出。

在此之后转载与您所选择的颜色相同的文本。

注意:这种情况发生得太快了,你会觉得好像文字改变了颜色

0

正如其他人所说,你需要重新打印不同颜色的文字来“改变”颜色

但是考虑你是用Win32控制台我觉得更建议要依靠依赖于平台的代码,它会工作 - >Setting the Cursor Position in a Win32 Console Application

移动光标周围给你你想要达到的目标更直接的控制(重 - /在控制台中覆盖已经打印的文本)。

另一个答案提到将'\r'打印到可以工作的控制台上,但仅适用于当前移动光标时你自由的“更改”控制台整个缓冲区中任何字符的当前行。

另一方面,正如你已经提到的那样,也有system("cls")哪一个人可能会认为是一个更“独立于平台”的方式,但与直接控制相比它非常缓慢(而且有点骇人听闻)我强烈建议不要使用它。 (如果你想知道为什么,看到system("pause"); - Why is it wrong?,授予其不一样的命令,但同样的原则也适用)

+0

感谢您的输入,因为这个职位,我已经尝试使用“系统(” CLS“)”,并已凸显我想要的地区工作。之前我没有考虑过这个问题,因为我认为它会太慢/迟缓且明显,但速度很快。 – Alex

+0

我认为它很慢,才能noticable,尤其是当你打算使用它凡在缓冲区更新相当频繁需要的游戏。但随意以你认为最好的方式去做,毕竟它是你的选择:) – user2047610

相关问题