您的位置:首页 > 房产 > 建筑 > 金融企业如何做好网络推广_图片制作软件怎么制作_创建属于自己的网站_郑州seo关键词排名优化

金融企业如何做好网络推广_图片制作软件怎么制作_创建属于自己的网站_郑州seo关键词排名优化

2025/3/11 8:56:26 来源:https://blog.csdn.net/2402_88047672/article/details/146148874  浏览:    关键词:金融企业如何做好网络推广_图片制作软件怎么制作_创建属于自己的网站_郑州seo关键词排名优化
金融企业如何做好网络推广_图片制作软件怎么制作_创建属于自己的网站_郑州seo关键词排名优化

目录

什么是 SetConsoleTextAttribute?

函数签名

参数详解

常见的颜色值

怎么用它?

再试一个多彩的例子

为什么要恢复默认颜色?

跟其他函数的关系

注意事项

什么是 SetConsoleTextAttribute?

SetConsoleTextAttribute 是一个 Windows API 函数,用来设置控制台文字的颜色和样式。它就像一个“调色盘”,可以改变你输出到屏幕上的文字颜色(比如红色、蓝色)或者背景颜色。

想象你在黑板上写字,默认是白色粉笔,但用这个函数,你可以换成彩色粉笔,还能给文字加个彩色背景。

函数签名

SetConsoleTextAttribute 的全称是 "Set Console Text Attribute",可以拆解成以下部分来理解:

  • Set:表示设置(更改某个属性或状态)。

  • Console:指的是控制台(Console),即 Windows 终端窗口。

  • Text:指的是文本,即显示在控制台上的字符。

  • Attribute:指的是属性,在这里主要指的是文本的颜色和背景颜色

它的定义是:

BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, // 屏幕的“钥匙”WORD wAttributes       // 颜色和样式的“调色盘”
);
  • HANDLE hConsoleOutput: 你用 GetStdHandle(STD_OUTPUT_HANDLE) 拿到的屏幕句柄。

  • WORD wAttributes: 一个数字,代表文字和背景的颜色组合。

  • 返回值是 BOOL:TRUE 表示成功,FALSE 表示失败。

参数详解

1. HANDLE hConsoleOutput - 屏幕的“钥匙”

  • 这是什么:跟 WriteConsoleA 一样,是屏幕的句柄。

  • 作用:告诉函数:“我要调整屏幕上文字的颜色。”

  • 怎么用:

HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);

2. WORD wAttributes - 颜色和样式的“调色盘”

  • 这是什么:一个 16 位整数(WORD),用来指定前景色(文字颜色)和背景色。

  • 作用:决定文字是什么颜色,背景是什么颜色。

  • 怎么用:用一些预定义的颜色值组合起来。

常见的颜色值

这些值是 Windows 定义好的,你可以直接用:

  • 前景色(文字颜色):

    • FOREGROUND_BLUE (1):蓝色

    • FOREGROUND_GREEN (2):绿色

    • FOREGROUND_RED (4):红色

    • FOREGROUND_INTENSITY (8):加亮(使颜色更鲜艳)

  • 背景色:

    • BACKGROUND_BLUE (16):蓝色背景

    • BACKGROUND_GREEN (32):绿色背景

    • BACKGROUND_RED (64):红色背景

    • BACKGROUND_INTENSITY (128):背景加亮

组合颜色

可以用 |(按位或)把颜色加在一起:

  • 红字绿底:FOREGROUND_RED | BACKGROUND_GREEN(4 | 32 = 36)

  • 亮蓝字黑底:FOREGROUND_BLUE | FOREGROUND_INTENSITY(1 | 8 = 9)

怎么用它?

我们写个例子,把文字变成红色:

#include <windows.h>
#include <cstring>int main() {// 1. 拿到屏幕钥匙HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);if (screen == INVALID_HANDLE_VALUE) {return 1;}// 2. 设置文字为红色SetConsoleTextAttribute(screen, FOREGROUND_RED);// 3. 输出文字const char* message = "我是红色的!";DWORD written;WriteConsoleA(screen, message, strlen(message), &written, NULL);return 0;
}

运行过程:

  1. 拿到钥匙:GetStdHandle(STD_OUTPUT_HANDLE) 给你屏幕句柄。

  2. 调颜色:SetConsoleTextAttribute 把文字颜色设为红色(FOREGROUND_RED 是 4)。

  3. 写文字:WriteConsoleA 输出“我是红色的!”,显示为红色。

运行结果:屏幕上显示红色的“我是红色的!”。

再试一个多彩的例子

我们输出几种不同颜色的文字:

#include <windows.h>
#include <cstring>int main() {HANDLE screen = GetStdHandle(STD_OUTPUT_HANDLE);if (screen == INVALID_HANDLE_VALUE) {return 1;}DWORD written;// 红字SetConsoleTextAttribute(screen, FOREGROUND_RED);const char* msg1 = "红色的字\n";WriteConsoleA(screen, msg1, strlen(msg1), &written, NULL);// 亮蓝字SetConsoleTextAttribute(screen, FOREGROUND_BLUE | FOREGROUND_INTENSITY);const char* msg2 = "亮蓝色的字\n";WriteConsoleA(screen, msg2, strlen(msg2), &written, NULL);// 绿字红底SetConsoleTextAttribute(screen, FOREGROUND_GREEN | BACKGROUND_RED);const char* msg3 = "绿字红底\n";WriteConsoleA(screen, msg3, strlen(msg3), &written, NULL);// 恢复默认(白字黑底)SetConsoleTextAttribute(screen, FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);const char* msg4 = "回到默认颜色\n";WriteConsoleA(screen, msg4, strlen(msg4), &written, NULL);return 0;
}

运行结果:

  1. “红色的字” 是红色。

  2. “亮蓝色的字” 是亮蓝色。

  3. “绿字红底” 是绿色文字、红色背景。

  4. “回到默认颜色” 是白色文字、黑色背景(默认样式)。

为什么要恢复默认颜色?

  • SetConsoleTextAttribute 设置的颜色会一直生效,直到你再次改变它。

  • 如果不恢复默认,后面所有输出都会用最后一次设置的颜色。

  • 默认颜色是白字黑底,用 FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE(4 | 2 | 1 = 7)表示。

跟其他函数的关系

  • 搭配 WriteConsoleA:先用 SetConsoleTextAttribute 调颜色,再用 WriteConsoleA 输出。

  • 跟 SetConsoleCursorPosition 一起用:可以控制颜色和位置,做出彩色的布局。

注意事项

  1. 颜色范围:

    • 只有 16 种基本颜色(通过组合红、绿、蓝)。

    • 加 INTENSITY 可以变亮,但没法调出所有颜色。

  2. 中文支持:

         如果显示乱码,可能需要设置 UTF-8 代码页:

system("mode con cp=65001");

    3.检查返回值 

if (!SetConsoleTextAttribute(screen, FOREGROUND_RED)) {return 1; // 出错了
}

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com