我正在用C编写程序.我想在控制台中更改文本颜色和背景颜色.我的示例程序是 –
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <dos.h> #include <dir.h> 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等旧编译器中运行.
在今天的编译器中,这些功能不起作用.我将提供两个函数SetColor和ChangeConsoleToColors.您将这些函数代码复制粘贴到程序中并执行以下步骤.我给出的代码在某些编译器中不起作用.
在今天的编译器中,这些功能不起作用.我将提供两个函数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; }
要使用此功能,您需要从程序中调用它.例如我正在拿你的示例程序 –
#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <dos.h> #include <dir.h> 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,&count ); //This will set our cursor position for the next print statement. SetConsoleCursorPosition(hStdOut,coord); } return; }
在此功能中,您传递两个数字.如果你想要正常颜色,只需将第一个数字设为零,将第二个数字设为颜色即可.我的例子是 –
#include <windows.h> //header file for windows #include <stdio.h> 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,coord); } return; }
在这种情况下,我将第一个数字设置为零,第二个数字设置为15,因此控制台颜色将为白色,因为白色的代码为15.这对我来说是代码:: blocks.希望它也适合你.