C/C++改变控制台的字体颜色 | 您所在的位置:网站首页 › pages字体颜色总是变回黑色 › C/C++改变控制台的字体颜色 |
当你接触编程的时候,是不是总是有这种感受:白字黑色的控制台总是很枯燥,正如你用大脑运行这段代码 #include #include int main(int argc,char *argv[]) { printf("Hello wolrd\n"); getch(); return 0; }渐渐的熟悉了电脑的基本的操作,学会了利用控制台的属性来修改程序的字体 可是什么时候才能写出来漂亮的界面:渐渐的学会了函数,终于知道了一个函数可以修改控制台的字体颜色 #include #include int main(int argc,char *argv[]) { system("color FC");//产生亮白色 printf("I am Bamboo!"); system("color 70");//产生背景白色文字黑色 return 0; }color命令详细介绍 设置默认的控制台前景和背景颜色。 COLOR [attr] attr 指定控制台输出的颜色属性。 颜色属性由两个十六进制数字指定 -- 第一个 对应于背景,第二个对应于前景。每个数字 可以为以下任何值: 0 = 黑色 8 = 灰色 1 = 蓝色 9 = 淡蓝色 2 = 绿色 A = 淡绿色 3 = 浅绿色 B = 淡浅绿色 4 = 红色 C = 淡红色 5 = 紫色 D = 淡紫色 6 = 黄色 E = 淡黄色 7 = 白色 F = 亮白色 如果没有给定任何参数,此命令会将颜色还原到 CMD.EXE 启动时 的颜色。这个值来自当前控制台 窗口、/T 命令行开关或 DefaultColor 注册表 值。 如果尝试使用相同的 前景和背景颜色来执行 COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1。 示例: "COLOR fc" 在亮白色上产生淡红色 这个时候你终于可以控制控制台的颜色了 可是有一个问题,控制台的颜色总是总是和语句运行之后的system('color 70')最后一个函数颜色修改的命令保持一致,似乎想把文字显示如csdn这样的高亮代码风格不太可能 ? 现在为您送上一个函数 #include #include #include int main() { HANDLE handle;//创建句柄 handle=GetStdHandle(STD_OUTPUT_HANDLE);//取标准输入输出句柄 SetConsoleTextAttribute(handle,0xF);//字符与 color相同 printf("Hello world\n"); SetConsoleTextAttribute(handle,0xFC); printf("Hello wolrd\n"); return 0; }setConsoleTextAttribute()函数的详细解释如下 BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes); 参数consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE); GetStdHandle(nStdHandle)是返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。 其参数nStdHandle的值为下面几种类型的一种: 值含义STD_INPUT_HANDLE标准输入的句柄STD_OUTPUT_HANDLE标准输出的句柄STD_ERROR_HANDLE标准错误的句柄wAttributes是用来设置颜色的参数: wAttributes颜色对应的值FOREGROUND_BLUE字体颜色:蓝1FOREGROUND_GREEN字体颜色:绿2FOREGROUND_RED字体颜色:红4FOREGROUND_INTENSITY前景色高亮显示8BACKGROUND_BLUE背景颜色:蓝16BACKGROUND_GREEN背景颜色:绿32BACKGROUND_RED背景颜色:红 64BACKGROUND_INTENSITY背景色高亮显示128也就是说SetConsoleTextAttribute函数是靠一个字节的低四来控制前景色,高四位来控制背景色。 其他写法SetConsoleTextAttribute(handle,0x07);填十六进制数字,前面的数字代表背景色,后面的代表前景色 SetConsoleTextAttribute(handle,7);直接接十进制数字。 具体见右图。 应用举例FOREGROUND_RED表示设置前景色为红色,即字体的颜色为红色; FOREGROUND_INTENSITY 表示设置前景色为高亮显示,FOREGROUND_GREEN表示绿色,两个参数中间加"|"表示前景色为高亮绿色; BACKGROUND_INTENSITY表示设置背景色为高亮显示,BACKGROUND_BLUE表示背景色为蓝色,BACKGROUND_INTENSITY |BACKGROUND_BLUE两个参数就使背景色为高亮蓝色。 要表示红色字体,白色背景可以使用SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),BACKGROUND_INTENSITY |FOREGROUND_INTENSITY | FOREGROUND_RED|BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE); 设置背景与字体都为高显BACKGROUND_INTENSITY |FOREGROUND_INTENSITY,设置字体颜色为FOREGROUND_RED,背景颜色为BACKGROUND_RED | BACKGROUND_GREEN | BACKGROUND_BLUE。其实这里把这些数值加起来就是二进制的,11111100,即十六进制0xFC。所以设置白体红字字也可以写成: SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),0xFC)。 其他颜色可照此类推: 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 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); 注意:使用SetConsoleTextAttribute函数一定要加上windows.h。 最后送上一个大神写的改变控制台写的库 ColorfulConsole.h(实现全在该文件里面) // ColorfulConsole.cpp : 瀹氫箟鎺у埗鍙板簲鐢ㄧ▼搴忕殑鍏ュ彛鐐广€? // //#include "stdafx.h" #include #include //#define OS_TYPE_WINDOWS_CC //#define OS_TYPE_LINUX_CC #ifdef OS_TYPE_WINDOWS_CC #include #endif // OS_TYPE_WINDOWS_CC enum class ConsoleColor { Green, Red, Blue, White, Black,Yellow,Purple,Gray,Cyan,None, GreenIntensity, RedIntensity, BlueIntensity, WhiteIntensity, BlackIntensity, YellowIntensity, PurpleIntensity, GrayIntensity,CyanIntensity }; enum class ConsoleBackgroundColor { Green, Red, Blue, White, Black, Yellow, Purple, Gray, Cyan,None, GreenIntensity, RedIntensity, BlueIntensity, WhiteIntensity, BlackIntensity, YellowIntensity, PurpleIntensity, GrayIntensity }; std::wostream& operator |
CopyRight 2018-2019 实验室设备网 版权所有 |