如何在code :: blocks中更改文本颜色和控制台颜色?
我正在用C编写程序。我想在控制台中更改文本颜色和背景颜色。 我的示例程序是 –
#include #include #include #include #include int main(int argc,char *argv[]) { textcolor(25); printf("\n \n \t This is dummy program for text color "); getch(); return 0; }
当我编译这个程序代码:: blocks给我一个错误 – textcolor未定义。 为什么会这样? 我在GNU GCC编译器和Windows Vista中工作。 如果它不起作用什么是textcolor的副本。 就像我想要改变控制台的背景颜色。 编译器给出了同样的错误,只是函数的名称不同。 如何更改控制台和文本的颜色。 请帮忙。
即使答案是在C ++中,我也没关系。
像textcolor这样的函数在turbo C和Dev C等旧编译器中运行。 在今天的编译器中,这些function不起作用。 我将提供两个函数SetColor和ChangeConsoleToColors 。 您将这些函数代码复制粘贴到程序中并执行以下步骤。我给出的代码在某些编译器中不起作用。
SetColor的代码是 –
void SetColor(int ForgC) { WORD wColor; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; //We use csbi for the wAttributes word. if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //Mask out all but the background attribute, and add in the forgournd color wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F); SetConsoleTextAttribute(hStdOut, wColor); } return; }
要使用此function,您需要从程序中调用它。 例如我正在拿你的示例程序 –
#include #include #include #include #include int main(void) { SetColor(4); printf("\n \n \t This text is written in Red Color \n "); getch(); return 0; } void SetColor(int ForgC) { WORD wColor; HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; //We use csbi for the wAttributes word. if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //Mask out all but the background attribute, and add in the forgournd color wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F); SetConsoleTextAttribute(hStdOut, wColor); } return; }
运行程序时,您将获得RED的文本颜色。 现在我要给你每种颜色的代码 –
Name | Value | Black | 0 Blue | 1 Green | 2 Cyan | 3 Red | 4 Magenta | 5 Brown | 6 Light Gray | 7 Dark Gray | 8 Light Blue | 9 Light Green | 10 Light Cyan | 11 Light Red | 12 Light Magenta| 13 Yellow | 14 White | 15
现在我要给出ChangeConsoleToColors的代码。 代码是 –
void ClearConsoleToColors(int ForgC, int BackC) { WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F); //Get the handle to the current output buffer... HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); //This is used to reset the carat/cursor to the top left. COORD coord = {0, 0}; //A return value... indicating how many chars were written // not used but we need to capture this since it will be // written anyway (passing NULL causes an access violation). DWORD count; //This is a structure containing all of the console info // it is used here to find the size of the console. CONSOLE_SCREEN_BUFFER_INFO csbi; //Here we will set the current color SetConsoleTextAttribute(hStdOut, wColor); if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //This fills the buffer with a given character (in this case 32=space). FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count); FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count ); //This will set our cursor position for the next print statement. SetConsoleCursorPosition(hStdOut, coord); } return; }
在此function中,您传递两个数字。 如果你想要正常颜色,只需将第一个数字设为零,将第二个数字设为颜色即可。 我的例子是 -
#include //header file for windows #include void ClearConsoleToColors(int ForgC, int BackC); int main() { ClearConsoleToColors(0,15); Sleep(1000); return 0; } void ClearConsoleToColors(int ForgC, int BackC) { WORD wColor = ((BackC & 0x0F) << 4) + (ForgC & 0x0F); //Get the handle to the current output buffer... HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); //This is used to reset the carat/cursor to the top left. COORD coord = {0, 0}; //A return value... indicating how many chars were written // not used but we need to capture this since it will be // written anyway (passing NULL causes an access violation). DWORD count; //This is a structure containing all of the console info // it is used here to find the size of the console. CONSOLE_SCREEN_BUFFER_INFO csbi; //Here we will set the current color SetConsoleTextAttribute(hStdOut, wColor); if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //This fills the buffer with a given character (in this case 32=space). FillConsoleOutputCharacter(hStdOut, (TCHAR) 32, csbi.dwSize.X * csbi.dwSize.Y, coord, &count); FillConsoleOutputAttribute(hStdOut, csbi.wAttributes, csbi.dwSize.X * csbi.dwSize.Y, coord, &count ); //This will set our cursor position for the next print statement. SetConsoleCursorPosition(hStdOut, coord); } return; }
在这种情况下,我将第一个数字设置为零,第二个数字设置为15,因此控制台颜色将为白色,因为白色的代码为15.这对我来说是代码:: blocks。 希望它也适合你。
你也可以使用rlutil :
- 跨平台,
- 仅标题(
rlutil.h
), - 适用于C和C ++,
- 实现
setColor()
,cls()
,getch()
,gotoxy()
等。 - 许可证: WTFPL
你的代码会变成这样:
#include #include "rlutil.h" int main(int argc, char* argv[]) { setColor(BLUE); printf("\n \n \t This is dummy program for text color "); getch(); return 0; }
看一下example.c和test.cpp的C和C ++示例。
这是一个在线function,我用它创建了一个头文件,我使用Setcolor();
相反,我希望这有帮助! 您可以通过选择0-256范围内的任何颜色来更改颜色。 :)遗憾的是,我相信CodeBlocks后来构建了window.h库…
#include //This is the header file for windows. #include //C standard library header file void SetColor(int ForgC); int main() { printf("Test color"); //Here the text color is white SetColor(30); //Function call to change the text color printf("Test color"); //Now the text color is green return 0; } void SetColor(int ForgC) { WORD wColor; //This handle is needed to get the current background attribute HANDLE hStdOut = GetStdHandle(STD_OUTPUT_HANDLE); CONSOLE_SCREEN_BUFFER_INFO csbi; //csbi is used for wAttributes word if(GetConsoleScreenBufferInfo(hStdOut, &csbi)) { //To mask out all but the background attribute, and to add the color wColor = (csbi.wAttributes & 0xF0) + (ForgC & 0x0F); SetConsoleTextAttribute(hStdOut, wColor); } return; }
一个简单的方法……
system("Color F0");
字母代表背景颜色,而数字代表文字颜色。
0 =黑色
1 =蓝色
2 =绿色
3 = Aqua
4 =红色
5 =紫色
6 =黄色
7 =白色
8 =灰色
9 =浅蓝色
A =浅绿色
B =浅水
C =浅红色
D =浅紫色
E =浅黄色
F =亮白色
system("COLOR 0A");
“
其中0A是背景和字体颜色0的组合
您应该先定义函数textcolor。 因为textcolor不是C中的标准函数。
void textcolor(unsigned short color) { HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(hcon,color); }