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 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135
|
// Colored Text on Paper.cpp : main project file.
#include <iostream>
#include <string>
#include <conio.h> // For _kbhit()) _getch() use
#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();
void WaitKey();
#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 --- " << Color[i] << " on " << Color[j] << " *** <--" << 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();
cout << endl <<"To use color, add ";
text(light_red on black); // Able to use names here, because of enum Colors{};
cout << "#include <windows.h>";
text();
cout << " to your list of ";
text(light_red on black);
cout << "#include";
text();
cout << "'s, " << endl;
cout << "if not already used.. Then, declare the following, afterwards.." << endl;
text(light_red on black);
cout << "HANDLE console = GetStdHandle(STD_OUTPUT_HANDLE);" << endl;
text();
cout << "and use the following, 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;
WaitKey();
ClearScreen();
cout << "\n\n\n\t\tHope you enjoyed.." << endl;
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 );
}
void WaitKey()
{
while (_kbhit()) _getch(); // Empty the input buffer
_getch(); // Wait for a key
while (_kbhit()) _getch(); // Empty the input buffer (some keys sends two messages)
}
|