C/C++改变控制台的字体颜色
当你接触编程的时候,是不是总是有这种感受:白字黑色的控制台总是很枯燥,正如你用大脑运行这段代码
#include <stdio.h>
#include <conio.h>
int main(int argc,char *argv[])
{printf("Hello wolrd\n");getch();return 0;
}
渐渐的熟悉了电脑的基本的操作,学会了利用控制台的属性来修改程序的字体
可是什么时候才能写出来漂亮的界面:渐渐的学会了函数,终于知道了一个函数可以修改控制台的字体颜色
#include <stdio.h>
#include <stdlib.h>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 <stdio.h>
#include <stdlib.h>
#include <windows.h>
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 | 字体颜色:蓝 | 1 |
FOREGROUND_GREEN | 字体颜色:绿 | 2 |
FOREGROUND_RED | 字体颜色:红 | 4 |
FOREGROUND_INTENSITY | 前景色高亮显示 | 8 |
BACKGROUND_BLUE | 背景颜色:蓝 | 16 |
BACKGROUND_GREEN | 背景颜色:绿 | 32 |
BACKGROUND_RED |
背景颜色:红 |
64 |
BACKGROUND_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 <iostream>
#include <string>//#define OS_TYPE_WINDOWS_CC
//#define OS_TYPE_LINUX_CC#ifdef OS_TYPE_WINDOWS_CC#include <Windows.h>
#endif // OS_TYPE_WINDOWS_CCenum 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<< (std::wostream& os, ConsoleColor data)
{switch (data){case ConsoleColor::Green: {#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_GREEN);
#else std::wcout << "\033[32m";
#endif}break;case ConsoleColor::Black: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, 0);
#else std::wcout << "\033[30m";
#endif}break;case ConsoleColor::Blue: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE);
#else std::wcout << "\033[34m";
#endif}break;case ConsoleColor::Gray: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED);
#else std::wcout << "\033[37m";
#endif}break;case ConsoleColor::Purple: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED);
#else std::wcout << "\033[35m";
#endif}break;case ConsoleColor::Red: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_RED);
#else std::wcout << "\033[31m";
#endif}break;case ConsoleColor::White: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
#else std::wcout << "\033[37m";
#endif}break;case ConsoleColor::Cyan: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN);
#else std::wcout << "\033[36m";
#endif}break;case ConsoleColor::Yellow: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN);
#else std::wcout << "\033[33m";
#endif}break;case ConsoleColor::None: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN);
#else std::wcout << "\033[0m";
#endif}break;case ConsoleColor::GreenIntensity: {#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_GREEN | FOREGROUND_INTENSITY);
#else std::wcout << "\033[32m;1m";
#endif}break;case ConsoleColor::BlackIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, 0);
#else std::wcout << "\033[30m;1m";
#endif}break;case ConsoleColor::BlueIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_INTENSITY);
#else std::wcout << "\033[34m;1m";
#endif}break;case ConsoleColor::GrayIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED | FOREGROUND_INTENSITY);
#else std::wcout << "\033[37m;1m";
#endif}break;case ConsoleColor::PurpleIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_INTENSITY);
#else std::wcout << "\033[35m;1m";
#endif}break;case ConsoleColor::RedIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_INTENSITY);
#else std::wcout << "\033[31m;1m";
#endif}break;case ConsoleColor::WhiteIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
#else std::wcout << "\033[37m;1m";
#endif}break;case ConsoleColor::YellowIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
#else std::wcout << "\033[33m;1m";
#endif}break;case ConsoleColor::CyanIntensity: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY);
#else std::wcout << "\033[36m;1m";
#endif}break;default:break;}return os;
}std::wostream& operator<< (std::wostream& os, ConsoleBackgroundColor data)
{switch (data){case ConsoleBackgroundColor::Green: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_GREEN);
#else std::wcout << "\033[42m";
#endif}break;case ConsoleBackgroundColor::Black: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, 0);
#else std::wcout << "\033[40m";
#endif}break;case ConsoleBackgroundColor::Blue: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_BLUE);
#else std::wcout << "\033[44m";
#endif}break;case ConsoleBackgroundColor::Gray: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, 0);
#else std::wcout << "\033[40m";
#endif}break;case ConsoleBackgroundColor::Purple: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_BLUE);
#else std::wcout << "\033[45m";
#endif}break;case ConsoleBackgroundColor::Red: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_RED);
#else std::wcout << "\033[41m";
#endif}break;case ConsoleBackgroundColor::White: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_BLUE | BACKGROUND_GREEN);
#else std::wcout << "\033[47m";
#endif}break;case ConsoleBackgroundColor::Yellow: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_RED | BACKGROUND_GREEN);
#else std::wcout << "\033[43m";
#endif}break;case ConsoleBackgroundColor::Cyan: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, BACKGROUND_BLUE | BACKGROUND_GREEN);
#else std::wcout << "\033[46m";
#endif}break;case ConsoleBackgroundColor::None: {
#ifdef OS_TYPE_WINDOWS_CCHANDLE handle = GetStdHandle(STD_OUTPUT_HANDLE);SetConsoleTextAttribute(handle, 0);
#else std::wcout << "\033[40m";
#endif}break;default:break;}return os;
}
测试文件
#define OS_TYPE_WINDOWS_CC
#include "ColorfulConsoleIO.h"
using std::wcout;
using std::endl;int main()
{std::cout << "what color it is ?" << endl;wcout << ConsoleColor::Green << "so what color it is?" << endl;wcout << ConsoleColor::Green<< "1abc" << endl;wcout << ConsoleColor::Red << "2red red is fire" << endl;wcout << ConsoleColor::Blue << "3blue blue love is blue" << endl;wcout << ConsoleColor::White << "4blue blue love is blue" << endl;wcout << ConsoleColor::Black << "5blue blue love is blue" << endl;wcout << ConsoleColor::Purple << "6blue blue love is blue" << endl;wcout << ConsoleColor::Yellow << "7blue blue love is blue" << endl;wcout << ConsoleColor::Cyan << "8blue blue love is blue" << endl;wcout << ConsoleColor::GreenIntensity << "1abc" << endl;wcout << ConsoleColor::RedIntensity << "2red red is fire" << endl;wcout << ConsoleColor::BlueIntensity << "3blue blue love is blue" << endl;wcout << ConsoleColor::WhiteIntensity << "4blue blue love is blue" << endl;wcout << ConsoleColor::BlackIntensity << "5blue blue love is blue" << endl;wcout << ConsoleColor::PurpleIntensity << "6blue blue love is blue" << endl;wcout << ConsoleColor::YellowIntensity << "7blue blue love is blue" << endl;wcout << ConsoleColor::CyanIntensity << "8blue blue love is blue" << endl;wcout << ConsoleBackgroundColor::Green << "1abc" << endl;wcout << ConsoleBackgroundColor::Red << "2red red is fire" << endl;wcout << ConsoleBackgroundColor::Blue << "3blue blue love is blue" << endl;wcout << ConsoleBackgroundColor::Black << "4abc" << endl;wcout << ConsoleBackgroundColor::White << "5red red is fire" << endl;wcout << ConsoleBackgroundColor::Purple << "6blue blue love is blue" << endl;wcout << ConsoleBackgroundColor::Yellow << "7blue blue love is blue" << endl;wcout << ConsoleBackgroundColor::Cyan << "8blue blue love is blue" << endl;wcout << ConsoleBackgroundColor::None;wcout << ConsoleColor::None;while(1);return 0;
}
运行效果
大家可用这个彩色字体开发一个古老的电脑游戏
C/C++改变控制台的字体颜色相关推荐
- R语言应用calibrate包的textxy函数向R原生绘图结果中添加文本标签:添加多个文本标签、改变文本标签的字体、改变文本标签的字体颜色
R语言应用calibrate包的textxy函数向R原生绘图结果中添加文本标签:添加多个文本标签.改变文本标签的字体.改变文本标签的字体颜色 目录
- listview改变选中行字体颜色
[android]listview改变选中行字体颜色 目标:选中item,其字体设置为#3197FF,未选中的,其字体为#FFFFFF 与listvew设置选中行item背景图片一样,使用select ...
- 在C语言中,SetConsoleTextAttribute(参数1,参数2)是设置控制台窗口字体颜色和背景颜色的函数。GetStdHandle(参数)函数用于获得句柄
在C语言中,SetConsoleTextAttribute(参数1,参数2)是设置控制台窗口字体颜色和背景颜色的函数. 参数1:句柄 参数2:颜色 颜色的参数 数值 颜色 0 黑色 1 深蓝色 2 深 ...
- iOS 改变状态栏的字体颜色
改变状态栏的字体颜色的步骤: 1.先在plist文件里add row, 然后再指定"View controller-based status bar appearance" ,再把 ...
- android 沉浸式状态栏字体颜色,改变Android状态栏字体颜色和实现沉浸式状态栏
目前已知的改变Android状态栏字体颜色的方法只有3种情况下可以实现,分别是手机是MIUI系统.魅族手机以及Android6.0.改变颜色方法分别如下: * 改变小米的状态栏字体颜色为黑色, 要求M ...
- 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )
编译后弹出的黑框框(exe 可执行文件)总是黑底白字,在做实践大作业时想到尝试改变字体的颜色与背景色,搜索发现有system和SetConsoleTextAttribute两个函数,各有长处,详细了解 ...
- 探索篇 | C语言改变控制台输出内容颜色
控制台是什么 让代码『跑』起来 当代码执行的时候,会生成一个控制台命令框,把我们想要的内容打印显示.这个窗口我们称之为计算机控制台 命名行界面 cmd 命令提示符 控制台 改变控制台前景色.背景色 只 ...
- 【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )(内含超好玩的c++游戏链接)
目录 游戏推荐 研究初步 SetConsoleTextAttribute函数 原型 参数 举个栗子 最后 题外话 一篇游戏笔记... 游戏推荐 最近,在玩(完)一个c++的控制台游戏. 啊,真的非常好 ...
- html 改变文本框字体颜色,CSS更改文本框的字体颜色
我已搜索和搜索,但不能很好地得到这个权利.我在我的网站上有一个文本框,在我的CSS/HTML中,我将它定义为一个类,就像其他任何东西一样,并给它一个背景图像没有问题.我决定我需要改变字体颜色,但不管我 ...
最新文章
- Android源代码介绍,Android-Log源码详解
- java nio.Buffer的属性变化
- 【Java】计算1+3+5+7+9和100以内的素数
- 样式表放在顶部的好处
- 用实体类来做数据绑定(不用数据表数据字段的绑定方法)
- c语言遗传算法百度云,遗传算法c语言程序.doc
- CLodop云打印服务(localhost本地)未安装启动
- Office批量打印精灵4.2入门教程
- handler机制及使用场景
- 阿里架构总监一次讲透中台架构
- Windows 适配 Apple Magic TrackPad2
- Android 抖音爱心动画,Android实现抖音心形函数
- 美国大厂码农薪资曝光:年薪18万美元,够养家,不够买海景房
- HTML5已定稿:将彻底颠覆原生应用
- Linux 安装中文 man 手册
- 大学英语四级电子照片修改过程。
- 58 同城 post 参数分析之 eval 加密
- Lesson 2 Thirteen equals one 十三等于一
- 丹尼斯·里奇-C语言创始人
- ChatGPT背后的经济账