Witam.
Nie jestem bardzo zaawansowany w C++. Trochę drogą własnego próbowania znalazłem sposób na zmienianie koloru tekstu w konsoli Windows - tak, żeby w głównym kodzie było łatwo widać, na jaki kolor się zmieniło. Powstała klasa, z której tworzę jeden obiekt w głównym kodzie i dwoma metodami mogę albo po prostu zmienić kolor, albo w nieco szybszy sposób wyświetlić podanego stringa w określonym kolorze.
#include <iostream>
#include <windows.h>
using std::cout;
class Color {
HANDLE hOut;
std::string curr_color;
public:
Color() {hOut=GetStdHandle(STD_OUTPUT_HANDLE);}
/* zmień kolor wyświetlania */
void chcolor(std::string c) {
int nr=7;
if(c=="DB") nr=1; // Ciemny niebieski
else if(c=="DG") nr=2; // Ciemny zielony
else if(c=="DC") nr=3; // Ciemny błękitny
else if(c=="DR") nr=4; // Ciemny czerwony
else if(c=="DV") nr=5; // Ciemny fioletowy
else if(c=="DY") nr=6; // Ciemny żółty
else if(c=="S") nr=7; // Standardowy
else if(c=="DS") nr=8; // Ciemny szary
else if(c=="B") nr=9; // Niebieski
else if(c=="G") nr=10; // Zielony
else if(c=="C") nr=11; // Błękitny
else if(c=="R") nr=12; // Czerwony
else if(c=="V") nr=13; // Fioletowy
else if(c=="Y") nr=14; // Żółty
else if(c=="W") nr=15; // Biały
SetConsoleTextAttribute(hOut, nr);
curr_color=c;
}
/* wyświetl dany tekst w określonym kolorze */
void color(std::string c, std::string txt) {
std::string pc=curr_color;
chcolor(c); cout<<txt; chcolor(pc);
}
};
Pytanie jest takie, czy wg Was można ten problem rozwiązać w lepszy sposób. Pewnie można jakoś usprawnić przypisywanie wartości zmiennej nr w zależności od argumentu c.
EDIT: dodaję przykład wykorzystania tej klasy - co prawda w odpowiedzi pojawiły się już lepsze rozwiązania, ale może ktoś będzie zainteresowany:
#include <iostream>
#include "color.h"
using std::cout;
int main() {
Color c;
cout<<"Ten tekst ma standardowy kolor, ";
c.chcolor("B");
cout<<"a ten jest już niebieski."<<'\n';
cout<<"W tym niebieskim tekście można też zrobić ";
c.color("Y", "żółte wyróżnienie");
cout<<", po którym tekst znów jest niebieski."<<'\n';
c.chcolor("S");
system("pause");
return 0;
}