C语言颜色问题,非常急!!!

void SetColor(unsigned short
ForeColor=4,unsigned short BackGroundColor=0) //给参数默认值,使它可以接受0/1/2个参数
{
HANDLE hCon = GetStdHandle(STD_OUTPUT_HANDLE); //本例以输出为例
SetConsoleTextAttribute(hCon,ForeColor|BackGroundColor);
};
int main()
{
SetColor();
std::cout<<"Hello world!"<<endl;
SetColor(40,30);
std::cout<<"Hello world!"<<endl;
return 0;
}

这里的SetColor(40,30);代表什么颜色;那么0~256分别代表什么颜色

1.改变整个控制台的颜色
用 system("color 0A");
其中color后面的0是背景色代号,A是前景色代号。各颜色代码如下:
0=黑色
1=蓝色
2=绿色
3=湖蓝色
4=红色
5=紫色
6=黄色
7=白色
8=灰色
9=淡蓝色
A=淡绿色
B=淡浅绿色
C=淡红色
D=淡紫色
E=淡黄色
F=亮白色
2.改变下一个输出或者输入字体和背景的颜色
采用SetConsoleTextAttribute函数,如
White on Black:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
Red on Black:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED);
Green on Black:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_GREEN);
Yellow on Black:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_GREEN);
Blue on Black:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_BLUE);
Magenta on Black:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_RED | FOREGROUND_BLUE);
Cyan on Black:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY |
FOREGROUND_GREEN | FOREGROUND_BLUE);
Black on Gray:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |
BACKGROUND_INTENSITY);
Black on White:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |
FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE);
Red on White:
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |
FOREGROUND_INTENSITY | BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE |
FOREGROUND_RED);
等等。
需要引入头文件:
windows.h
函数原型:
BOOL SetConsoleTextAttribute( HANDLE hConsoleOutput, WORD wAttributes );
wAttributes 的取值含义对应如下:
Attribute Meaning
FOREGROUND_BLUE Text color contains blue.
FOREGROUND_GREEN Text color contains green.
FOREGROUND_RED Text color contains red.
FOREGROUND_INTENSITY Text color is intensified.
BACKGROUND_BLUE Background color contains blue.
BACKGROUND_GREEN Background color contains green.
BACKGROUND_RED Background color contains red.
BACKGROUND_INTENSITY Background color is intensified.
COMMON_LVB_LEADING_BYTE Leading byte.
COMMON_LVB_TRAILING_BYTE Trailing byte.
COMMON_LVB_GRID_HORIZONTAL Top horizontal.
COMMON_LVB_GRID_LVERTICAL Left vertical.
COMMON_LVB_GRID_RVERTICAL Right vertical.
COMMON_LVB_REVERSE_VIDEO Reverse foreground and background attributes.
COMMON_LVB_UNDERSCORE Underscore
温馨提示:答案为网友推荐,仅供参考
第1个回答  推荐于2017-11-25
SetColor调用的是SetConsoleTextAttribute方法

其中不能使用SetColor(40,30);这样的参数,是错误的.
SetConsoleTextAttribute函数的原型为BOOL SetConsoleTextAttribute(HANDLE
hConsoleOutput, WORD wAttributes);

wAttributes是用来设置颜色的参数:

FOREGROUND_BLUE
字体颜色:蓝

FOREGROUND_GREEN
字体颜色:绿

FOREGROUND_RED
字体颜色:红

FOREGROUND_INTENSITY
前景色高亮显显

BACKGROUND_BLUE
背景颜色:蓝

BACKGROUND_GREEN
背景颜色:绿

BACKGROUND_RED
背景颜色:红
BACKGROUND_INTENSITY
背景色高亮显示

FOREGROUND_BLUE,FOREGROUND_GREEN,FOREGROUND_RED,FOREGROUND_INTENSITY,BACKGROUND_BLUE,BACKGROUND_GREEN,BACKGROUND_RED,BACKGROUND_INTENSITY对应的值分别是1
2 4 8 16 32 64 128。

也就是说SetConsoleTextAttribute函数是靠一个字节的低四来控制前景色,高四位来控制背景色。

具体传入的参数你看下百科:http://baike.baidu.cn/view/4237672.htm追问

谢啦!
但是那其余的一些数字呢,表示的是这些颜色的组合吧,那具体是什么颜色呢

追答

因为定义的只有1 2 4 8 16 32 64 128这几个(为了每个位分开)。

所以你输入的数可以分解成这几个数字的组合,
例如30=16+8+4+2,就是FOREGROUND_GREEN,FOREGROUND_RED,FOREGROUND_INTENSITY,BACKGROUND_BLUE
字体是高亮的 黄色(绿色和红色组合) 背景蓝

40=32+8 就是FOREGROUND_INTENSITY, BACKGROUND_GREEN
就是字体高亮,背景绿

你可以再仔细看看刚刚的百科地址,颜色都是红,绿,蓝三种颜色组合形成的。

追问

非常感谢,我在追问一个问题了就选为满意答案

就是字体颜色与背景颜色会不会再次产生色变,比如背景绿色,字体蓝色,那么显示在屏幕上的会是背景绿字体蓝吗?还是别的什么

追答

比如背景绿色,字体蓝色,那么显示在屏幕上的会是背景绿字体蓝吗?

是的。

不过要是你还选了高亮这个FOREGROUND_INTENSITY
,可能颜色和看到的有一些差别。

本回答被提问者采纳
第2个回答  2013-07-22
给你讲一下图像里面的知识吧,图像的像素是跟数据类型有关的,如果类型是uint8,那么像素的范围是0~255,如果是double型,那么像素范围是0~1,还有uint16的呀。。。。
第3个回答  2019-02-10
你可以用控制台color命令,system("color ##");
具体帮助请按Win+R,输入cmd,打开后输入color /?后查看。
相似回答