Visualizzazione dei risultati da 1 a 5 su 5

Discussione: [C++] Usando le API

  1. #1

    [C++] Usando le API

    Ciao, sapete un modo piu semplice usando le WIN API che mi permette un codice più semplice ad esempio non facendo mescolare 2 colori per averne uno
    ESEMPIO:
    codice:
    SetConsoleTextAttribute(hStdOut,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
    Il risultato è giallo chiaro, mi chiedeco se c'era un modo più semplice per realizzarlo.

  2. #2

    Re: [C++] Usando le API

    Originariamente inviato da Salvatore_91
    Ciao, sapete un modo piu semplice usando le WIN API che mi permette un codice più semplice ad esempio non facendo mescolare 2 colori per averne uno
    ESEMPIO:
    codice:
    SetConsoleTextAttribute(hStdOut,FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_INTENSITY);
    Il risultato è giallo chiaro, mi chiedeco se c'era un modo più semplice per realizzarlo.
    codice:
    #define SALVATORE91_FOREGROUND_YELLOW (FOREGROUND_RED | FOREGROUND_GREEN)
    ...
    SetConsoleTextAttribute(hStdOut, SALVATORE91_FOREGROUND_YELLOW | FOREGROUND_INTENSITY);

  3. #3
    Capito grz

  4. #4
    Esistono diversi metodi per gestire i colori, potresti per esempio salvare il seguente codice in un file chiamato colors.h e posto nella cartella che contiene il tuo sorgente.

    codice:
    // ConsoleColor.h
    
    
    #pragma once
    #include <iostream>
    
    #include <windows.h>
    
    
    inline std::ostream& blue(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, FOREGROUND_BLUE
                  |FOREGROUND_GREEN|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& red(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
                    FOREGROUND_RED|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& green(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
                  FOREGROUND_GREEN|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& yellow(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
             FOREGROUND_GREEN|FOREGROUND_RED|FOREGROUND_INTENSITY);
        return s;
    }
    
    inline std::ostream& white(std::ostream &s)
    {
        HANDLE hStdout = GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout, 
           FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
        return s;
    }
    
    struct color {
        color(WORD attribute):m_color(attribute){};
        WORD m_color;
    };
    
    template <class _Elem, class _Traits>
    std::basic_ostream<_Elem,_Traits>& 
          operator<<(std::basic_ostream<_Elem,_Traits>& i, color& c)
    {
        HANDLE hStdout=GetStdHandle(STD_OUTPUT_HANDLE); 
        SetConsoleTextAttribute(hStdout,c.m_color);
        return i;
    }
    
    // Copyleft Vincent Godin
    E poi usarlo così:

    codice:
    #include <iostream>
    
    #include "colors.h"
    
    using namespace std;
    
    int main()
    {
    	cout << green << "Ciao";
    	return 0;
    }
    Nota le virgolette al posto di <>.

    Leggi anche questo articolo.
    "Se riesci a passare un pomeriggio assolutamente inutile in modo assolutamente inutile, hai imparato a vivere."

  5. #5
    ok grz mille, mi sapresti dire che mescolamento devo fare per avere il colore grigio chiaro??

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.