René Nyffenegger's collection of things on the web
René Nyffenegger on Oracle - Most wanted - Feedback -
 

Outputting Strings in the Console

#include <windows.h>

class Console {
public:
  enum fore_color {
    f_black  = 0                                                                         ,
    f_white  = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE,
    f_red    = FOREGROUND_INTENSITY | FOREGROUND_RED                                     ,
    f_green  = FOREGROUND_INTENSITY |                  FOREGROUND_GREEN                  ,
    f_yellow = FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN                  ,
    f_blue   = FOREGROUND_INTENSITY |                                     FOREGROUND_BLUE,
    f_magenta= FOREGROUND_INTENSITY | FOREGROUND_RED |                    FOREGROUND_BLUE,
    f_cyan   = FOREGROUND_INTENSITY |                  FOREGROUND_GREEN | FOREGROUND_BLUE,
  };

  enum back_color {
    b_black  = 0                                                                         ,
    b_white  = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE,
    b_red    = BACKGROUND_INTENSITY | BACKGROUND_RED                                     ,
    b_green  = BACKGROUND_INTENSITY |                  BACKGROUND_GREEN                  ,
    b_yellow = BACKGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN                  ,
    b_blue   = BACKGROUND_INTENSITY |                                     BACKGROUND_BLUE,
    b_magenta= BACKGROUND_INTENSITY | BACKGROUND_RED |                    BACKGROUND_BLUE,
    b_cyan   = BACKGROUND_INTENSITY |                  BACKGROUND_GREEN | BACKGROUND_BLUE,
  };

  void Move (int x, int y);
  void Color(fore_color fg, back_color bg);
  void Cls(back_color bg=b_black);
};

void Console::Cls(back_color bg) {
  COORD coordScreen = { 0, 0 }; 
  DWORD cCharsWritten; 
  CONSOLE_SCREEN_BUFFER_INFO csbi; 
  DWORD dwConSize; 
  HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE); 

  SetConsoleTextAttribute(hConsole, bg);
  
  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); 
}

void Console::Move(int x, int y) {
  COORD point;
  point.X = x; point.Y = y;
  SetConsoleCursorPosition(
    GetStdHandle(STD_OUTPUT_HANDLE),point);
}

void Console::Color(fore_color fg, back_color bg) {
  SetConsoleTextAttribute(
    GetStdHandle(STD_OUTPUT_HANDLE), fg | bg);
}
#include <iostream>

using namespace std;

int main(int argc, char* argv[]){ 
  Console c;
  c.Cls(Console::b_green);
  c.Color(Console::f_red , Console::b_blue);
  c.Move(4,4);
  cout << "xxx";
  c.Color(Console::f_blue, Console::b_yellow);
  c.Move(4,5);
  cout << "yyyyy";

  return 0;
}