huidong

首页 | 会员登录 | 关于争取 2022 寒假做出汇东网 Ver3.0.0 !
搜索文章


部分文字颜色设置

//需要头#include <windows.h>
 
int _tmain(int argc, _TCHAR* argv[])
{
    HANDLE consolehwnd;//创建句柄
    consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄
     
    SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY | FOREGROUND_RED | BACKGROUND_GREEN);//设置字体颜色
    printf("hello ");
    SetConsoleTextAttribute(consolehwnd,FOREGROUND_INTENSITY | FOREGROUND_BLUE | BACKGROUND_GREEN);//设置字体颜色
    printf("world");
     
    getchar();
    return 0;
}

效果:

image.png

主要就是用了这个函数:

SetConsoleTextAttribute(句柄,颜色属性);


颜色表:

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

当然那个句柄也很重要:

consolehwnd = GetStdHandle(STD_OUTPUT_HANDLE);//实例化句柄

其参数nStdHandle的值为下面几种类型的一种:

含义
STD_INPUT_HANDLE标准输入的句柄
STD_OUTPUT_HANDLE标准输出的句柄
STD_ERROR_HANDLE标准错误的句柄

还有,这个函数给出的配色方案比较少,详见 https://baike.baidu.com/item/SetConsoleTextAttribute百度百科链接


另外还有来自 https://blog.csdn.net/devvs/article/details/48765911 CSND博客的链接(内容如下),里面进行了混色,并且没有创建句柄变量,直接调用了那个函数。

cout<<"原色(没有设置字体颜色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);//设置三色相加
cout<<"白色(红色绿色蓝色相加)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);//设置红色
cout<<"红色(设置的颜色为红色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);//设置绿色
cout<<"绿色(设置的颜色为绿色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
//设置蓝色
cout<<"蓝色(设置的颜色为蓝色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);//设置红色和绿色相加
cout<<"黄色(红色和绿色相加色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);//设置红色和蓝色相加
cout<<"粉色(红色和蓝色相加色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);//设置绿色和蓝色相加
cout<<"青色(绿色和蓝色相加色)"<<endl;
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY);//设置颜色,没有添加颜色,故为原色
cout<<endl;


通过以上的混色可以诞生一些新的颜色,博主还附了一张图:

image.png

看起来效果貌似不错,但我暂时还没有试。


另外就是更简单一点的了,设置整个cmd窗口的颜色属性,直接用system("color 07");这样的语句即可

用法只需要在cmd输入color/?就可以看到

image.png

不做更详细的解释了。





2020.8.6 一个示例代码,来源未知

#include <stdio.h>
#include <windows.h>
using namespace std;


//文字前景色
#define FOREGROUND_BLACK        0    //黑色
#define FOREGROUND_BLUE            1    //蓝色
#define FOREGROUND_GREEN        2    //绿色
#define FOREGROUND_CYAN            3    //青色
#define FOREGROUND_RED            4    //红色
#define FOREGROUND_MAGENTA        5    //洋红
#define FOREGROUND_BROWN        6    //棕色
#define FOREGROUND_LIGHTGRAY    7    //淡灰
#define FOREGROUND_DARKGRAIY    8    //深灰
#define FOREGROUND_LIGHTBLUE    9    //淡蓝
#define FOREGROUND_LIGHTGREEN    10    //淡绿
#define FOREGROUND_LIGHTCYAN    11    //淡青
#define FOREGROUND_LIGHTRED        12    //淡红
#define FOREGROUND_LIGHTMAGENTA    13    //淡洋红
#define FOREGROUND_YELLOW        14    //黄色
#define FOREGROUND_WHITE        15    //白色




void color(short x)    //自定义函根据参数改变颜色 
{
    if (x >= 0 && x <= 15)//参数在0-15的范围颜色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), x);    //只有一个参数,改变字体颜色 
    else//默认的颜色白色
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 7);
}
int main()
{
    printf("此处为没调用颜色函数之前默认的颜色\n");
    //调用自定义color(x)函数 改变的颜色
    color(0);    printf("黑色0\n");
    color(1);     printf("蓝色1\n");
    color(2);     printf("绿色2\n");
    color(3);     printf("湖蓝色3\n");
    color(4);      printf("红色4\n");
    color(5);      printf("紫色5\n");
    color(6);     printf("黄色6\n");
    color(7);      printf("白色7\n");
    color(8);      printf("灰色8\n");
    color(9);     printf("淡蓝色9\n");
    color(10);     printf("淡绿色10\n");
    color(11);     printf("淡浅绿色11\n");
    color(12);  printf("淡红色12\n");
    color(13);     printf("淡紫色13\n");
    color(14);     printf("淡黄色14\n");
    color(15);     printf("亮白色15\n");
    color(16);    //因为这里大于15,恢复默认的颜色 
    printf("回到原来颜色\n");
    //直接使用颜色函数
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 13 | 8 | 128 | 32);
    printf("红色字体   前景加强 绿色背景 背景加强\n");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 64);
    printf("亮白色字体 前景加强 红色背景 背景加强\n");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 32);
    printf("亮白色字体 前景加强 红色背景 背景加强\n");
    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 15 | 8 | 128 | 64);
    printf("亮白色字体 前景加强 红色背景 背景加强\n");

    SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 12 | 8 | 16 | 32 | 64);
    printf("亮白色字体 前景加强 红色背景 背景加强\n");
    //声明句柄再调用函数 
    HANDLE JB = GetStdHandle(STD_OUTPUT_HANDLE);//创建并实例化句柄 
    SetConsoleTextAttribute(JB, 2 | 8);
    printf("颜色及对应数字表:\n");
    for (int i = 0; i < 10; i++){
        //color(16);printf(" "); 
        SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), i);
        printf("%-3d", i);
        color(16); printf(" ");
        if (i % 16 == 0)    printf("\n");
    }
    color(16);
    system("pause");
    return 0;
    //类似的函数还有system("color XX");(X是十六进制0~F之间的数,不过这种函数改变的是整个画面,而不能让多处局部变色;
}




返回首页


Copyright (C) 2018-2022 huidong