2017-04-09 78 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

相關問題