VC控制台输出控制文本及背景颜色
GetStdHandle MSDN参考页
关键函数GetStdHandle
SetConsoleTextAttribute
HANDLE GetStdHandle(DWORD nStdHandle);
nStdHandle
:参数可以为STD_INPUT_HANDLE
、STD_OUTPUT_HANDLE
、STD_ERROR_HANDLE
.HANDLE
: 就是void *
,返回的是一个句柄.
SetConsoleTextAttribute MSDN参考页
BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
hConsoleOutput
: 控制台屏幕缓冲区的句柄.wAttributes
: 字符属性,可以分为两类,即颜色和DBCS,以下属性在WinCon.h
头文件中进行定义,对于控制文本及背景颜色,我们只关心八个与颜色相关的属性:
Attribute | 含义 |
---|---|
FOREGROUND_BLUE | 文本颜色包含蓝色 |
FOREGROUND_GREEN | 文本颜色包含绿色 |
FOREGROUND_RED | 文本颜色包含红色 |
FOREGROUND_INTENSITY | 文本颜色增强 |
BACKGROUND_BLUE | 背景颜色包含蓝色 |
BACKGROUND_GREEN | 背景颜色包含绿色 |
BACKGROUND_RED | 背景颜色包含红色 |
BACKGROUND_INTENSITY | 背景色增强 |
应用程序可以将前景常量和背景常量组合起来以实现不同的颜色。 例如,以下组合实现:蓝色背景上的亮青色文本。
FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE
以上属性均可以通过这种组合方式进行颜色的混合.
依此类推,控制台一共允许(四种属性自由组合 C 4 0 + C 4 1 + C 4 2 + C 4 3 + C 4 4 = C_4^0+C_4^1+C_4^2+C_4^3+C_4^4= C40+C41+C42+C43+C44=)16种文字颜色,以及(四种属性自由组合 C 4 0 + C 4 1 + C 4 2 + C 4 3 + C 4 4 = C_4^0+C_4^1+C_4^2+C_4^3+C_4^4= C40+C41+C42+C43+C44=)16种背景颜色,一共有16$\times$16 = 256种组合.
#include <windows.h>
#include <stdio.h>
#include <iostream>
BOOL SetConsoleColor(WORD wAttributes)
{
HANDLE hConsole = GetStdHandle(STD_OUTPUT_HANDLE);
if (INVALID_HANDLE_VALUE == hConsole)
{
return FALSE;
}
return SetConsoleTextAttribute(hConsole, wAttributes);
}
int main(int argc, char* argv[])
{
printf("控制台下默认文字背景颜色:\n");
printf("----------------------------------\n\n");
SetConsoleColor(FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE);
printf("控制台下红字篮底:\n");
printf("----------------------------------\n\n");
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
printf("还原为控制台下默认文字背景颜色:\n");
printf("----------------------------------\n\n");
SetConsoleColor(FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY | BACKGROUND_BLUE | BACKGROUND_RED | BACKGROUND_INTENSITY);
std::cout << "控制台下黄字紫底:" << std::endl;
std::cout << "----------------------------------" << std::endl << std::endl;
SetConsoleColor(FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);
std::cout << "还原为控制台下默认文字背景颜色:" << std::endl;
std::cout << "----------------------------------" << std::endl << std::endl;
system("pause");
return 0;
}