• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

[C++] jak zaimplementować funkcję wypisującą kolorowy tekst na wyjście (Opis)

Mały hosting, OGROMNE możliwości
0 głosów
405 wizyt
pytanie zadane 17 maja 2018 w C i C++ przez Hiskiel Pasjonat (22,830 p.)

Witam.

 

Staram się napisać pewną funkcję,

tutaj jak wygląda:

std::ostream& col(std::ostream& s, std::string &Out, short color){
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), color);
    std::cout<<Out;
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
    return s<<"";
}

i tutaj wywołanie:

cout<<"\ttekst\n"<<
               col("\tinny tekst\n", 12)<<
               ...

Chodzi mi o to, żeby nie męczyć się kilkanaście razy i nie oddzielać cout'ów wywołaniem funkcji która ma zmienić kolor. Nie wiem jak to dokładnie zrobić.

 

Za wszelką pomoc dziękuję. 

 

Pozdrawiam.

1 odpowiedź

0 głosów
odpowiedź 17 maja 2018 przez monika90 Pasjonat (22,940 p.)
#include <windows.h>
#include <iostream>

struct attr
{
    WORD attributes;

    friend std::ostream& operator << (std::ostream& out, attr a)
    {
        out.flush();
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), a.attributes);
        return out;
    }
};

struct restore_attributes
{
    WORD attributes;

    restore_attributes()
    {
        CONSOLE_SCREEN_BUFFER_INFO info;
        GetConsoleScreenBufferInfo(GetStdHandle(STD_OUTPUT_HANDLE), &info);
        attributes = info.wAttributes;
    }

    restore_attributes(restore_attributes&&) = delete;

    ~restore_attributes()
    {
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), attributes);
    }
};

int main()
{
    restore_attributes on_exit;
    attr red{FOREGROUND_RED | BACKGROUND_BLUE};
    attr blue{FOREGROUND_BLUE | BACKGROUND_RED};
    attr black{0};

    std::cout << red << "Hello" << black << ',' << blue << "World!" << std::endl;
}

 

Podobne pytania

0 głosów
0 odpowiedzi 466 wizyt
pytanie zadane 30 listopada 2018 w C i C++ przez Tomasz Sobczak Bywalec (2,830 p.)
0 głosów
1 odpowiedź 537 wizyt
pytanie zadane 23 czerwca 2019 w C i C++ przez niezalogowany
0 głosów
1 odpowiedź 259 wizyt
pytanie zadane 4 listopada 2015 w C i C++ przez Benek Szeryf (93,850 p.)

93,715 zapytań

142,629 odpowiedzi

323,260 komentarzy

63,257 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Twierdza Linux. Bezpieczeństwo dla dociekliwych

Aby uzyskać rabat -10%, użyjcie kodu pasja-linux, wpisując go w specjalne pole w koszyku.

...