2017-04-17 2 views
0

Ich muss ein CLI ähnlich dem CMD des Fensters machen. Um den Farbbefehl auszuführen, verwende ich die Funktionen rlutil::setColor und rlutil::setBackgroundColor in rlutil.h. Aber, um die Farben in der ganzen Konsole zu ändern, muss ich den Bildschirm löschen (rlutil::cls()), oder nur die neuen Ausgaben werden mit diesen Änderungen wie in den Bildern erscheinen.Ändern Sie die Konsolenfarben und behalten Sie die Ausgabe in C++

Ohne die cls:

Without the cls

Mit dem cls: Before the command After the first command - colors af

Im cmd (verwenden ich aus @echo nicht dem aktuellen Verzeichnis angezeigt): The same codes used in the cmd

Dies ist die Funktion, die ich gemacht habe:

void colors(string value) {//I recive the user's input (like in the cmd) 
    char foo[3];//I save each character in this array 
    int c_text = 0, c_bg = 0;//Variables to get the numeric value of each character 
    if(value.length() == 2) {//This is to only accept 2 characters as parameter for the command 
     strcpy(foo, value.c_str());//Copy the values of the string in the array 
     c_bg= chartoHEX(foo[0]);//Take the int value of each character 
     //(if the parameter in chartoHEX is '0', returns 0, if it's 'A', returns 10, and so on) 
     c_text = chartoHEX(foo[1]); 
     //If the function returns -1 means that the parameter wasn't an HEX number 
     if(c_text != -1 && c_bg != -1) { 
      rlutil::setColor(c_text);//Changes the text color 
      rlutil::setBackgroundColor(c_bg);//Changes the background color 
     } 
    } 
} 

Wenn ich die Funktion aufrufen:

colors("0a"); 
rlutil::cls(); 
cout << "C:\\Users\\Raven>"; 

Wie kann ich die Ausgabe halten, nachdem die Farben zu ändern?

Antwort

1

Wenn Sie die Low-Level-nativen Windows-Konsolenfunktionen verwenden, können Sie die Farben ändern, ohne den Text zu beeinflussen. Rufen Sie das Konsolenhandle mit GetStdHandle oder _get_osfhandle ab und rufen Sie dann WriteConsoleOutputAttribute.

+0

Das hat nicht funktioniert, aber das hat mir geholfen, die Lösung zu finden, anstatt 'WriteConsoleOutputAttribute' zu ​​verwenden, benutzte ich' FillConsoleOutputAttribute'. Danke trotzdem. –

+0

@ RavenH.- Wie wäre es, die Lösung hier zu enthüllen? – lit

+0

FillConsoleOutputAttribute füllt jede Zelle mit derselben Farbe, WriteConsoleOutputAttribute gibt die Farben pro Zelle in einem Array an. Wählen Sie einfach die Funktion, die Ihren Bedürfnissen am besten entspricht. – Anders

Verwandte Themen