如何更改代码块中的文本颜色和控制台颜色

How to change text color and console color in code::blocks?

本文关键字:颜色 文本 控制台 何更改 代码      更新时间:2023-10-16

我正在用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中工作。如果它不起作用,什么是文本颜色的重复。我想改变控制台的背景颜色。编译器给了我相同的错误,只是函数的名称不同。如何更改控制台和文本的颜色。请帮忙。

即使答案是C++,我也可以。

textcolor这样的函数在turbo CDev CetColorChangeConsoleToColors。将这些函数代码复制粘贴到程序中,然后执行以下步骤。我给出的代码在某些编译器中不起作用。

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;
}

当你运行程序时,你会得到红色的文本颜色。现在我要给你每种颜色的代码-

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;
}

在这个函数中,您可以传递两个数字。如果你想要普通的颜色,只需要把第一个数字作为零,把第二个数字作为颜色。我的例子是

#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, 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;
} 

在这种情况下,我将第一个数字设置为0,将第二个数字设为15,因此控制台颜色将为白色,因为白色代码为15。这在代码::块中对我有效。希望它也适用于你。

您也可以使用rlutil:

  • 跨平台
  • 仅报头(rlutil.h)
  • 适用于C和C++
  • 实现setColor()cls()getch()gotoxy()
  • 许可证:WTFPL

你的代码会变成这样:

#include <stdio.h>
#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++示例。

我知道,我很晚了,但是,也许我的答案可以帮助别人。基本上很简单。这是我的密码。

#include<iostream>
#include<windows.h>
using namespace std;
int main()
{
HANDLE colors=GetStdHandle(STD_OUTPUT_HANDLE);
string text;
int k;
cout<<" Enter your Text : ";
getline(cin,text);
for(int i=0;i<text.length();i++)
{
k>9 ? k=0 : k++;
if(k==0)
{
SetConsoleTextAttribute(colors,1);
}else
{
SetConsoleTextAttribute(colors,k);
}
cout<<text.at(i);
}
}

输出

此图将向您展示的工作原理

如果你想要完整的教程,请在这里看到我的视频:如何在C++中更改文本颜色

这是一个在线函数,我用它创建了一个头文件,并使用Setcolor();,我希望这能有所帮助!您可以通过选择0-256范围内的任何颜色来更改颜色。:)遗憾的是,我相信CodeBlocks有一个window.h库的后期版本。。。

#include <windows.h>            //This is the header file for windows.
#include <stdio.h>              //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;
}

textcolor函数在最新的编译器中不再受支持。

这是更改代码块中文本颜色的最简单方法。您可以使用system函数。

更改文本颜色:

#include<stdio.h> 
#include<stdlib.h> //as system function is in the standard library
int main()        
{
system("color 1"); //here 1 represents the text color
printf("This is dummy program for text color");
return 0;
}

如果您想同时更改文本颜色&控制台颜色您只需要在system功能中添加另一个颜色代码

更改文本颜色&控制台颜色:

system("color 41"); //here 4 represents the console color and 1 represents the text color

注意:不要像那样在颜色代码之间使用空格

system("color 4 1");

尽管如果你这样做,代码块将显示所有的颜色代码。您可以使用此技巧来了解所有支持的颜色代码。

您应该在之前定义函数textcolor。因为文本颜色不是C.中的标准功能

void textcolor(unsigned short color) {
HANDLE hcon = GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hcon,color);
}

一种简单的方法。。。

system("Color F0");

字母表示背景颜色,数字表示文本颜色。

0=黑色

1=蓝色

2=绿色

3=浅绿色

4=红色

5=紫色

6=黄色

7=白色

8=灰色

9=淡蓝色

A=浅绿色

B=浅绿色

C=浅红色

D=浅紫色

E=淡黄色

F=亮白色

system("COLOR 0A");'

其中0A是背景和字体颜色的组合0