how to change colour of a specific output on conso

2020-08-01 18:53发布

问题:

//following codes once change the colour, then they keep them along all the way, //if i want to write juxt one word with different colour like cout<<"4June" //should be with red jxt the colour of text should change not the background //colour and the if i display something like cout<<"colour not changed"; then //colour should be the original one, how to attain that c++????

#include <iostream>
#include <windows.h>
#include <winnt.h>
#include <stdio.h>
#include "stdafx.h"
using namespace std;

int main(int argc, char* argv[])
{
   HANDLE consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);
   cout << "this text is not colorized\n";
   SetConsoleTextAttribute(consolehwnd, FOREGROUND_RED);
   cout << "this text shows as red\n";
   SetConsoleTextAttribute(consolehwnd, FOREGROUND_BLUE);
   cout << "this text shows as blue\n";
}


OR

SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),1)

OR

system("color 3");
cout<<"colour changed"<<endl;**

回答1:

if you want red text to a black background you would just type SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4); cout<<"4th June";

To reset back to normal color, set it to color 7. SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);

Here is a table of all the Console colors. you can make 256 combinations by just entering the color code number from the above image to get the desired color.

Below is some console color management code.

#include <windows.h> 
#include <iostream>
using namespace std;




void gotoxy(int x, int y);
void setcolor(WORD color);
void setForeGroundAndBackGroundColor(int ForeGroundColor,int BackGroundColor);
void clrscr(); 
void printAllColors();



int main()
{
  // set red text on black background    
  gotoxy(30,10);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),4); cout<<"4th June";  

  // set white text on black background
  gotoxy(1,23);
  SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7);



  return 0;
}


void setcolor(WORD color)
{
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color);
    return;
}



void setForeGroundAndBackGroundColor(int ForeGroundColor,int BackGroundColor)
{
   int color=16*BackGroundColor+ForeGroundColor;
   setcolor(color);
}




void gotoxy(int x, int y)
{
    COORD coord;
    coord.X = x; coord.Y = y;
    SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE), coord);
    return;
}




void clrscr()
{
    COORD coordScreen = { 0, 0 };
    DWORD cCharsWritten;
    CONSOLE_SCREEN_BUFFER_INFO csbi;
    DWORD dwConSize;
    HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);

    GetConsoleScreenBufferInfo(hConsole, &csbi);
    dwConSize = csbi.dwSize.X * csbi.dwSize.Y;
    FillConsoleOutputCharacter(hConsole, TEXT(' '), dwConSize, coordScreen, &cCharsWritten);
    GetConsoleScreenBufferInfo(hConsole, &csbi);
    FillConsoleOutputAttribute(hConsole, csbi.wAttributes, dwConSize, coordScreen, &cCharsWritten);
    SetConsoleCursorPosition(hConsole, coordScreen);
    return;
}


void printAllColors()
{
   int ix=0;
   int iy=1;
   int col=0;
   setcolor(7);
   clrscr();

   // Demo setForeGroundAndBackGroundColor
   for (int i =0;i<16;i++)
   {
      for(int j=0;j<16;j++)
      {
       setForeGroundAndBackGroundColor(i,j);
       gotoxy(i*5  , iy+j); cout<<""<<i + (16 *j)<<"";
       col++;
      }
   }


   setcolor(31);
   cout<<"\n";

  gotoxy(1,23);
}


/*

Color      Background    Foreground
---------------------------------------------
Black            0           0
Blue             1           1
Green            2           2
Cyan             3           3
Red              4           4
Magenta          5           5
Brown            6           6
White            7           7
Gray             -           8
Intense Blue     -           9
Intense Green    -           10
Intense Cyan     -           11
Intense Red      -           12
Intense Magenta  -           13
Yellow           -           14
Intense White    -           15



  */


标签: c++ windows