Visualizzazione dei risultati da 1 a 5 su 5
  1. #1

    [C++]colore sfondo e testo nella console

    Ciao a tutti!
    Stò creando un programma console, ho incontrato qualche problema nel cambiare i colori di sfondo e testo: vorrei che i colori del testo cambino di riga in riga. Vorrei però anche un particolare colore per lo sfondo; per cambiare lo sfondo ho utilizzato
    codice:
    system("color B0");
    poi ho utilizzato le API di windows per cambiare il colore del testo con questa funzione:
    codice:
    void colore(short Color) 
    { 
    HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); 
    SetConsoleTextAttribute(hCon,Color); 
    }
    Il problema è che il riquadro attorno ad ogni carattere non è del colore dello sfondo. Ho visto che, sempre con le API, è possibile cambiare il colore del riquadro attorno al carattere, la cosa, però diventa un po' complicata, perchè sono costretto a cercare un nuovo numero per l'API ogni volta che voglio cambiare lo sfondo.
    C'è una soluzione alternativa??
    Grazie in anticipo!

  2. #2
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,480

    Re: [C++]colore sfondo e testo nella console

    Originariamente inviato da quit10
    ... sono costretto a cercare un nuovo numero per l'API ogni volta che voglio cambiare lo sfondo. ...
    Non ho capito cosa intendi ...
    No MP tecnici (non rispondo nemmeno!), usa il forum.

  3. #3
    Scusa, hai ragione, non mi sono spiegato bene.
    con "un nuovo numero per l'API", mi riferivo alla variabile Color da passare alla funzione colore. Intendevo quindi dire che, quando cambio il colore dello sfondo, devo anche cambiare il colore che contorna ogni carattere.

  4. #4
    codice:
    BOOL SetConsoleFGColor(WORD Color)
    {
        HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE);
        const WORD fgAttributes = FOREGROUND_RED | FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY;
        const WORD bgAttributes = BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_INTENSITY;
        if(hCon==INVALID_HANDLE_VALUE)
            return FALSE;
        CONSOLE_SCREEN_BUFFER_INFO csbi;
        if(!GetConsoleScreenBufferInfo(hCon,&csbi))
            return FALSE;
        Color = (Color & fgAttributes) | (csbi.wAttributes & bgAttributes);
        if(!SetConsoleTextAttribute(hCon,Color))
            return FALSE;
    }
    Comunque evita la chiamata a system e usa le apposite API per impostare i colori.
    Amaro C++, il gusto pieno dell'undefined behavior.

  5. #5
    Grazie mile MItaly!
    Era proprio ciò di cui avevo bisogno!!

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.