Comment puis-je modifier la couleur de fond de la console entière? J'ai essayé Je veux effectivement que toute la console soit rouge en rouge lorsqu'une erreur grave apparaît. P>
Merci à tous ceux qui tentent d'aider. P> SetConsoletextatTtribute code> et modifie uniquement la couleur d'arrière-plan du nouveau texte. P>
7 Réponses :
Je pense que le FillconsOolOutputtatRibute < / Code>
fonction va faire ce dont vous avez besoin. Définissez-le à la coordonnée de démarrage de la console et définissez nlength code> au nombre de caractères de la console (
Landth * longueur code>).
Très proche, mais les cellules qui contiennent déjà des caractères restent la couleur de fond précédente.
Devinez ma Win32 / Console est un peu rouillée. Pouvez-vous essayer WriteConSoleOutputtatRibute ? Cela pourrait être ce que vous cherchez.
Essayez quelque chose comme:
+1 simple mais efficace même s'il est plus lent d'utiliser un appel code> système code>.
J'ai fini par aller avec ça. J'aurais préféré une fonction API, mais c'est si simple et fonctionne bien.
Ca ne fonctionne pas ! Il modifie la couleur de la couleur du texte et la couleur de fond de texte, pas de couleur de console entière
Cela fonctionne pour moi. Il modifie la couleur d'arrière-plan sans gâcher la couleur de premier plan du texte déjà affichée, en modifiant chaque cellule de caractères de la console, une à la fois. Vous devrez obtenir la poignée à votre mémoire tampon de sortie de la console, ce que je crois est fait avec getStdhandle () .
DWORD written = 0; COORD writeCoord = {0}; WORD attribute; for (int y = 0; y < consoleBufferLength; y++) // rows { for (int x = 0; x < consoleBufferWidth; x++) // columns { writeCoord.X = x; writeCoord.Y = y; ReadConsoleOutputAttribute(consoleOutputHandle, &attribute, 1, writeCoord, &written); attribute &= 0xFF0F; // zero the background color attribute |= 12 << 4; // change the background color to red FillConsoleOutputAttribute(consoleOutputHandle, attribute, 1, writeCoord, &written); } }
Je sais que c'est une ancienne question, mais que diriez-vous de ce code:
#include <windows.h> #include <iostream> VOID WINAPI SetConsoleColors(WORD attribs); int main() { SetConsoleColors(BACKGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY); std::cout << "Hello, world!" << std::endl; std::cin.get(); return 0; } VOID WINAPI SetConsoleColors(WORD attribs) { HANDLE hOutput = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFOEX cbi; cbi.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX); GetConsoleScreenBufferInfoEx(hOutput, &cbi); cbi.wAttributes = attribs; SetConsoleScreenBufferInfoEx(hOutput, &cbi); }
Pour une raison quelconque, cette solution provoque une rétrécie de la fenêtre de ma console chaque changement de couleur
Il peut être fait et tout l'arrière-plan peut être défini sur la couleur désirée avec SETCONSORECREENBUTINGERINFOEX . Le code ci-dessous ne doit pas gâcher la sortie de la console précédente, surtout s'il utilisait les couleurs:
#include "Windows.h" void FlashConsoleBackgroundColor(int cntFlashes, int flashInterval_ms, COLORREF color) { CONSOLE_SCREEN_BUFFER_INFOEX sbInfoEx; sbInfoEx.cbSize = sizeof(CONSOLE_SCREEN_BUFFER_INFOEX); HANDLE consoleOut = GetStdHandle(STD_OUTPUT_HANDLE); GetConsoleScreenBufferInfoEx(consoleOut, &sbInfoEx); COLORREF storedBG = sbInfoEx.ColorTable[0]; for (int i = 0; i < cntFlashes; ++i) { //-- set BG color Sleep(flashInterval_ms); sbInfoEx.ColorTable[0] = color; SetConsoleScreenBufferInfoEx(consoleOut, &sbInfoEx); //-- restore previous color Sleep(flashInterval_ms); sbInfoEx.ColorTable[0] = storedBG; SetConsoleScreenBufferInfoEx(consoleOut, &sbInfoEx); } } int main() { printf("Flashing console BG: RED"); FlashConsoleBackgroundColor(20, 50, RGB(255, 0, 0)); printf("\rFlashing console BG: ORANGE\n"); FlashConsoleBackgroundColor(10, 100, RGB(255, 105, 0)); return 0; }
Comment cette réponse est-elle différente de: la réponse de @ Magetzub ci-dessus? Ils montrent tous les deux comment utiliser getconsolescreenbufferinfoex i> et setConsolescreenbufferinfoex i> Seule votre réponse semble être inutilement plus complexe.
En fait, mon code est assez différent dans la fonctionnalité, même s'il a l'air similaire. @ Le code de Magetzub modifie la couleur de premier plan et de fond de tous les caractères ayant les mêmes attributs que la dernière ligne imprimée. Si vous n'avez pas utilisé SETCONSOLETEXTTTRIBUT avant cela, la totalité des antécédents change. Toutefois, ajouter avant: setConsoletextatTtribute (getStdhandle (std_output_handle), 0x96); printf ("Quelques prises de console précédentes \ n"); code> .. et il échoue. Mon exemple change une seule couleur, la couleur de l'arrière-plan, quel que soit ce qui a été imprimé avant. Également en bonus, vous pouvez la définir sur la personnalisation RVB.
J'ai une solution sale ici, mais donne ce que tu veux exactement. console p> p>
HANDLE out = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(out, 0x9 | 0x70); // text color from 0x1-0x9 // text background color from 0x10-0x90 system("color d1"); /* Sets the default console foreground and background colors COLOR [attr] attr Specifies color attribute of console output Color attributes are specified by TWO hex digits -- the first corresponds to the background; the second the foreground. Each digit can be any of the following values: 0 = Black 8 = Gray 1 = Blue 9 = Light Blue 2 = Green A = Light Green 3 = Aqua B = Light Aqua 4 = Red C = Light Red 5 = Purple D = Light Purple 6 = Yellow E = Light Yellow 7 = White F = Bright White If no argument is given, this command restores the color to what it was when CMD.EXE started. This value either comes from the current console window, the /T command line switch or from the DefaultColor registry value. The COLOR command sets ERRORLEVEL to 1 if an attempt is made to execute the COLOR command with a foreground and background color that are the same. /*
Sons comme il est tâche facile en C # , mais en C ++ ..: | N'a rien trouvé sur une google rapide. Peut-être juste définir le fond de texte sur le rouge et imprimer une gamme complète de caractères, principalement avec votre texte à l'intérieur, également sur fond rouge? Je pense que cela pourrait être qualifié de solution de contournement.
Ceci est trivial dans la langue de commande Windows:
couleur 4f code>, et c'est tout. :-)
@Alf: ce qui signifie que cela pourrait fonctionner:
Système ("CMD / C \" Couleur 4F \ "") code>.
@Loadmaster qui fonctionne bien. Je sais que ce n'est généralement pas recommandé, pas portable, etc., mais je pense que c'est ma seule option à ce stade. Sauf si je pouvais comprendre comment faire la même chose que la couleur est en C ++ (ce que je suis sûr est possible).