Kolorowa konsola i C++
Konsola systemu Windows jest znana wszystkim, którzy choć zasmakowali programowania, bo przecież od programów uruchamianych w konsoli się zaczyna. Jednak nie każdy szybko przechodzi do korzystania z API. Nie znaczy to jednak, że nie będzie mógł stworzyć choć trochę bardziej atrakcyjnego graficznie programu. Istnieją w końcu sposoby na "pokolorowanie" konsoli.
Konsola systemu Windows jest znana wszystkim, którzy choć zasmakowali programowania, bo przecież od programów uruchamianych w konsoli się zaczyna. Jednak nie każdy szybko przechodzi do korzystania z API. Nie znaczy to jednak, że nie będzie mógł stworzyć choć trochę bardziej atrakcyjnego graficznie programu. Istnieją w końcu sposoby na "pokolorowanie" konsoli.
Aby dodać kolory do swojej konsoli możemy skorzystać z jednego z dwóch sposobów. Pierwszy z nich to zastosowanie funkcji system():
system("COLOR 0B");
Funkcja ta przyjmuje argument typu char. Należy zakomunikować, że zamierzamy zmienić kolory w konsoli, poprzez podanie na samym początku wyrazu COLOR. Następnie (po spacji) podajemy kolejno kolor tła i kolor liter.
Oto lista odpowiednich znaków dla poszczególnych kolorów:
0 - czarny
1 - niebieski
2 - zielony
3 - błękitny
4 - czerwony
5 - purpurowy
6 - żółty
7 - biały
8 - szary
9 - jasnoniebieski
A - jasnozielony
B - jasnobłękitny
C - jasnoczerwony
D - jasnopurpurowy
E - jasnożółty
F - jaskrawobiały
Przy zastosowaniu tej funkcji z odpowiednimi argumentami możemy stworzyć aplikację mniej monotonną. Metoda ta ma jednak jedną podstawową wadę. Kolory stosowane są do całej konsoli. Nie można np. pokolorować każdej linii osobno.
Język C++ byłby z pewnością "niepełny", gdyby nie istniała możliwość kolorowania osobnych linii czy znaków. Aby nadrobić ten brak została stworzona dwuargumentowa funkcja SetConsoleTextAttribute(). Pierwszy argument to tzw. uchwyt, o którym nie będę teraz się rozpisywał. Powiem tylko, że należy, stworzyć go i ustawić jego wartość w następujący sposób:
HANDLE uchwyt; uchwyt = GetStdHandle(STD_OUTPUT_HANDLE);
Funkcja SetConsoleTextAttribute() inaczej pobiera dane o kolorach. Tutaj otrzymujemy 255 zestawów: kolor znaków + tła. Nie będę ich wszystkich tutaj wypisywał. Udostępnię jednak mały program, który wyświetli wszystkie zestawy wraz z ich kodami. Można go pobrać klikając tutaj.
Całe wywołanie wygląda tak:
HANDLE uchwyt; uchwyt = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(uchwyt,13);
Można także pokusić się o stworzenie specjalnej funkcji, która pomoże w ustawianiu koloru:
void set_color(int c) {
HANDLE uchwyt;
uchwyt = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(uchwyt,c);
}
Ja osobiście polecam drugą opcję. Pozwala dużo lepiej wykorzystać możliwości konsoli. Sam z niej skorzystałem przy wnoszeniu poprawek do ostatniej wersji gry MovieProducer, którą udostępnię jeszcze dzisiaj albo jutro. Nawiasem mówiąc jest to ostatnia już wersja konsolowa tej gry. Teraz, jak tylko znajdę czas, zabiorę się za wielosystemową wersję tej gry.