1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119
|
// Colored Text on Paper.cpp : main project file.
#include <iostream>
#include <string>
#include <windows.h>
enum Colors{
black, // 0 text color - multiply by 16, for background colors
dark_blue, // 1
dark_green, // 2
dark_cyan, // 3
dark_red, // 4
dark_magenta, // 5
dark_yellow, // 6
light_gray, // 7
dark_gray, // 8
light_blue, // 9
light_green, // 10
light_cyan, // 11
light_red, // 12
light_magenta, // 13
light_yellow, // 14
white // 15
};
using namespace std;
void ClearScreen();
#define on , // So I can use the function - void text(text_color on background_color)
// To more easily remember which is text color vs background color
// My text color function. Use it if you wish.
void text(int text_color = 7 on int paper_color = 0)
{
// defaults to light_gray on black
int color_total = (text_color+(paper_color*16));
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color_total );
}
int main()
{
string Color[16] ={"Black","Dark Blue","Dark Green","Dark Cyan","Dark Red","Dark Magenta","Dark Yellow","Light Gray",
"Dark Gray","Light Blue","Light Green","Light Cyan","Light Red","Light Magenta","Light Yellow","White"};
int i,j;
for(j=0;j<16;j++)
{
for(i=0;i<16;i++)
{
if(j==i) // If text color is same as paper color
{
text();
cout << "---> *** Place-holder --- Text same color as background *** <---" << endl;
i++; // Skip to next color
}
if (i<16) // If not white on white, then continue
{
text(i on j);
cout << Color[i] << " on " << Color[j] << " (Text color=" << i << "+Background color="<< j*16 << " (" << j << "*16)=" << i+(j*16) << ")" << endl;
}
}
}
text(); // Able to use names here, because of enum Colors{};
cout << endl << endl << "Where a number is skipped, the text would be same color as the backgound.." << endl;
cout << "To use color, add to your list of ";
text(light_red on black);
cout << "#include";
text();
cout << "'s, if not already used.." << endl;
text(light_red on black);
cout << "#include <windows.h>";
text();
cout << "." << endl << "Declare the following, afterwards.." << endl;
text(light_red on black);
cout << "HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);" << endl;
text();
cout << "and use the folowing, whenever you wish to change colors.." << endl;
text(light_red on black);
cout << "SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),color_total );" << endl;
text();
cout << "Or examine the '";
text(light_red on black);
cout << "void text(int text_color on int paper_color);";
text();
cout << "' function," << endl <<"at the top of this program. Works great, doesn't it ??" << endl;
cout << "Just make sure to add '";
text(light_red on black);
cout << "#define on ,";
text();
cout << "', if you want to use the '";
text(light_red on black);
cout << "on";
text();
cout << "' word," << endl;
cout << "instead of a comma, to separate the two color choices." << endl << endl;
cout << "Press enter to exit.." << endl;
cin.clear();
cin.sync();
cin.get();
ClearScreen();
return 0;
}
void ClearScreen()
{
DWORD n;
DWORD size;
COORD coord = {0};
CONSOLE_SCREEN_BUFFER_INFO csbi;
HANDLE h = GetStdHandle ( STD_OUTPUT_HANDLE );
GetConsoleScreenBufferInfo ( h, &csbi );
size = csbi.dwSize.X * csbi.dwSize.Y;
FillConsoleOutputCharacter ( h, TEXT ( ' ' ), size, coord, &n );
GetConsoleScreenBufferInfo ( h, &csbi );
FillConsoleOutputAttribute ( h, csbi.wAttributes, size, coord, &n );
SetConsoleCursorPosition ( h, coord );
}
| |