C/C++改变控制台的字体颜色 您所在的位置:网站首页 pages字体颜色总是变回黑色 C/C++改变控制台的字体颜色

C/C++改变控制台的字体颜色

2024-03-24 14:18| 来源: 网络整理| 查看: 265

当你接触编程的时候,是不是总是有这种感受:白字黑色的控制台总是很枯燥,正如你用大脑运行这段代码

#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 实验室设备网 版权所有