【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )

这篇具有很好参考价值的文章主要介绍了【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

编译后弹出的黑框框(exe 可执行文件)总是黑底白字,在做实践大作业时想到尝试改变字体的颜色与背景色,搜索发现有systemSetConsoleTextAttribute两个函数,各有长处,详细了解一下,为了以后的使用。

操作平台:Microsoft Visual Studio 2019 

[content]

system函数 (Windows系统)

函数功能

函数原型 (注:指令大小写均可)

函数参数规定

函数缺点

示例程序(system函数)

SetConsoleTextAttribute函数  

函数头文件 

函数功能 

函数原型

函数参数 

示例程序(SetConsoleTextAttribute函数)


system函数 (Windows系统)

 系统函数,不用引其他的头文件

函数功能

发出一个DOS命令

  • DOS命令——指DOS操作系统的命令,是一种面向磁盘的操作命令,主要包括目录操作类命令、磁盘操作类命令、文件操作类命令和其它命令。

 调用color函数可以改变控制台的前景色和背景从而达到我们的目的,即设置默认的控制台前景和背景颜色。(还有以下功能举例);

  • system("pause")可以实现冻结屏幕,便于观察程序的执行结果;
  • system("CLS")可以实现清屏操作。(清屏后原数据不会被清除)

函数原型 (注:指令大小写均可)

//system函数原型
int system(const char *command);
//system实现color功能的函数定义语句
system("color 01");  //设置背景为黑色,字体为蓝色

函数参数规定

由函数原型可知system函数的参数为const char*类型,则使用时注意

  1. 【对于system函数而言】要在system的()内加""
  2. 【对于color函数而言】在""内color与所需输入的颜色属性中间用空格隔开,不能用逗号,也不能直接输入而不隔开

错误输入参数时会出现的情况:

  • 直接输入system("colorf4");而不隔开时会出现如下:【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )
  • 用逗号时会出现system(“color ”)的功能及使用方式;  
COLOR  [attr]
/*attr   指定控制台输出的颜色属性*/

示例: "COLOR fc" 在亮白色上产生淡红色(即背景为白色,字体为红色)

//应用示例
system("color f4"); //红字白底

颜色属性由两个十六进制数字指定——第一个对应于背景第二个对应于前景(字体)

每个数字可以为以下任何值(淡色与原色相差不大,但是试的时候仔细观察一下亮度的确还是有差距的,大小写均可)

  0 = 黑色       8 = 灰色
  1 = 蓝色       9 = 淡蓝色
  2 = 绿色       A = 淡绿色
  3 = 浅绿       B = 淡浅绿色
  4 = 红色       C = 淡红色
  5 = 紫色       D = 淡紫色
  6 = 黄色       E = 淡黄色
  7 = 白色       F = 亮白色

特别注意: 

①如果最初使用system("color")时没有给定任何参数(此处的参数是指attr,即颜色属性),此命令会将颜色还原到 CMD.EXE 启动时的颜色(即仍是原始的黑底白字)(这个值来自当前控制台窗口、/T 命令行开关或 DefaultColor 注册表值。)

②若在最后想把控制台还原到最初的黑底白字,不给参数是无法实现这一功能的,只能使用 system("color 07"); 还原到黑底白字,在最后使用system("color")不给参数是无法实现把颜色还原到黑底白字的;

③如果尝试使用相同的前景和背景颜色来执行COLOR 命令,COLOR 命令会将 ERRORLEVEL 设置为 1(即仍是黑底白字)。

函数缺点

运行下面示例程序会发现,system函数加上color函数这个指令后可以对控制台文本属性进行改变,但是一改变就是整个控制台发生变化,只能把控制台改成一种颜色,无法达到我们想要指定一行的文本发生颜色改变(即改成多种颜色)的效果,因此,有下面SetConsoleTextAttribute函数,这个函数更加灵活。

示例程序(system函数)

#include<iostream>
using namespace std;

int main() {
	string q;  //设置一个值便于观察颜色变化  

	system("COLOR f9");  //此处大写,设置为白底蓝字
	cout << "hello" << endl;
	cout << "观察中:";
	cin >> q;
	cout << endl;

	system("color 05");  //此处小写,设置为黑底紫字
	cout << "hello" << endl;
	cout << "观察中:";
	cin >> q;
	cout << endl;

	system("cls");  //试用system函数的其他指令提供的功能,也可以把这一行注释掉
	cout << endl << "查看cls清屏后是否还能查看刚刚输入的数据" << endl << "输入的观察值为  q = " << q << endl;

	system("color 07");   //还原为最初颜色,黑底白字
	cout << endl << "观察结束,随便输入啦:";
	cin >> q;
	return 0;
}

SetConsoleTextAttribute函数  

函数头文件 

#include<Windows.h>

函数功能 

设置控制台文本属性

函数原型

BOOL SetConsoleTextAttribute(
      HANDLE hConsoleOutput,
    WORD   wAttributes
); 

函数参数 

hConsoleOutput  —— 控制台屏幕缓冲区的句柄

这里我们引入GetSTDHandle函数来作为参数 

 GetStdHandle(nStdHandle)是返回标准的输入、输出或错误的设备的句柄,也就是获得输入、输出/错误的屏幕缓冲区的句柄。

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

 wAttributes  —— 字符属性,包括颜色和 DBCS (点击查询DBCS双字节字符)

Attribute 含义 对应数字
FOREGROUND_BLUE 文本颜色包含蓝色。 1
FOREGROUND_GREEN 文本颜色包含绿色。 2
FOREGROUND_RED 文本颜色包含红色。 4
FOREGROUND_INTENSITY 文本颜色增强 8
BACKGROUND_BLUE 背景色包含蓝色。 16
BACKGROUND_GREEN 背景色包含绿色。 32
BACKGROUND_RED 背景色包含红色。 64
BACKGROUND_INTENSITY 背景色增强。 128
COMMON_LVB_LEADING_BYTE 前导字节。 \
COMMON_LVB_TRAILING_BYTE 尾随字节。 \
COMMON_LVB_GRID_HORIZONTAL 顶部水平。 \
COMMON_LVB_GRID_LVERTICAL 左垂直。 \
COMMON_LVB_GRID_RVERTICAL 右垂直。 \
COMMON_LVB_REVERSE_VIDEO 反转前景和背景属性。 \
COMMON_LVB_UNDERSCORE 下划线。 \

前景属性指定文本颜色背景属性指定用于填充单元格背景的颜色; 其他属性与 DBCS 一起使用。

应用程序可以将前景常量和背景常量组合起来以实现不同的颜色,这个时候考察的就是绘画能力啦(红色+绿色= 黄色 ps:可以加高亮哦),使用 | 符号。

例如,以下组合实现:蓝色背景上的亮青色文本。

FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_INTENSITY | BACKGROUND_BLUE

如果没有指定背景常量,则背景为黑色,如果没有指定前景常量,则文本为黑色。

例如,以下组合实现:白色背景上的黑色文本。 为背景指定了红色、绿色和蓝色,它们组合成白色背景。 没有为前景指定标志颜色,因此它为黑色。

BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED

更多详情见:  控制台屏幕缓冲区

 【注】关于wAttributes 字符属性参数的写法有三种,如下:

//BACKGROUND代表背景,FOREGROUND代表前景
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN);//设置黄色(红色+绿色)
//十六进制数字
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 0x04);  //红色
//十进制数字
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), 2);  //绿色

示例程序(SetConsoleTextAttribute函数)

#include<Windows.h>
int main() {
	cout << "Hello    ——this is the prime color" << endl;
	cout << "先来看一哈青色的字儿:";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置青色
	cout << endl << "Hello World!" << endl;

	string q;
	cout << "来尝试随便输入一下吧(给你一个蓝底白字):";
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), BACKGROUND_BLUE | FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE); //设置蓝底白字
	cin >> q;

	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY);//没有给其他颜色,只给了文本增强,只有亮度稍微改变一下
	cout <<endl<< "zai随便输入一下吧" << endl;
	SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE), FOREGROUND_INTENSITY | FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE);//设置白色
	cin >> q;
	cout << endl << "自己尝试一下,写着玩儿叭,拜拜咯——" << endl;

	return 0;
}

 文章来源地址https://www.toymoban.com/news/detail-457328.html

 

到了这里,关于【c++】设置控制台窗口字体颜色和背景色(system和SetConsoleTextAttribute函数 )的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • C#控制台应用程序如何添加窗口关闭事件?

    公司有一个控制台应用程序,在关闭控制台应用程序窗口前,想处理一下业务逻辑。还有比如误操作关闭了,或者像消息队列启动了发送消息提醒,那关闭了窗口代表控制台应用销毁了,也需要发送消息通知。那这个时候添加关闭窗口事件就派上用场了。 很多小伙伴问,有没

    2024年02月13日
    浏览(47)
  • git推荐:IDEA控制台改为git窗口,直接在IDEA中使用git窗口,巨爽

    File —— Settings Tools —— Terminal 更改 Shell path: D:xxxGitgit-bash.exe 打开 Terminal即可弹出git窗口 不用关闭即可,再次使用,点击 Terminal

    2024年02月06日
    浏览(38)
  • PyCharm 调试过程中控制台 (Console) 窗口内运行命令 - 实时获取中间状态

    ​​​ [1] Yongqiang Cheng, https://yongqiang.blog.csdn.net/

    2024年02月20日
    浏览(65)
  • python selenium 运行driver时一直弹出控制台CMD窗口怎么办

    1.python selenium 运行driver时一直弹出控制台CMD窗口,且不断报以下错误应该怎么处理? DevTools listening on ws://127.0.0.1:51303/devtools/browser/6d5f8d32-1e30-4749-ad54-17f08ee3a983 真的非常影响心情啊!!!  2.一直在网上搜索,按照大家所说的用以下代码还是不行: options = webdriver.ChromeOptions(

    2024年02月11日
    浏览(49)
  • Qt配置设置,修改全文字体大小颜色,背景颜色

    这是完成时的demo,选择所需。 点击确认修改,全局修改,效果第二张图。 在没有点击确认修改时,字体等按钮的改变只会在文本框里面体现出来。点击确认才会修改全局的东西。点击恢复默认时,字体字号颜色控件全部恢复初始状态,当点击确认修改,全局才会改为初始状

    2024年02月11日
    浏览(50)
  • C++制作安装包【1】—— 控制台实现

    之前用NSIS的时候发现不方便自制UI,找了其他的安装包开发框架,开发手感还是不好,功能残缺不一。我就想 如何使用纯代码的方式制作安装包 呢?经历了众多艰难才终于摸出方法。网上现有的文章都是用NSIS,Windows Installer等等现成框架制作安装包的。所以我另开一个专栏

    2024年02月04日
    浏览(43)
  • C++控制台打飞机小游戏

    我终于决定还是把这个放出来。 视频在这:https://v.youku.com/v_show/id_XNDQxMTQwNDA3Mg==.html 具体信息主界面上都有写。 按空格暂停,建议暂停后再升级属性。 记录最高分的文件进行了加密。 有boss(上面视频2分47秒)。 挺好玩的。 可能有bug,不想改了,整体体验不错就行了。 更多

    2024年02月05日
    浏览(45)
  • C++控制台实现简化版吃鸡游戏

    直接上代码 这个游戏是一个简化版的吃鸡游戏。你需要通过键盘输入W、A、S、D来移动玩家位置,并击败敌人来获得积分。当你累计得分达到5分时,游戏结束,你将获得胜利。地图中的P表示玩家位置,E表示敌人位置,.表示空白位置。每次击败敌人后,将会生成一个新的敌人

    2024年02月16日
    浏览(50)
  • c++控制台双人格斗小游戏(测试版)

    嗨嗨嗨,又是我! 我又来发博客啦! 最近太闲了,又做了个small游戏:小人-格斗(测试版) 记得加上gamesio.h哦

    2024年02月12日
    浏览(50)
  • FinalShell SSH工具安装教程及编辑窗口修改背景颜色,自定义背景图片,修改字体,修改快捷键(详细图文教程)

    FinalShell 在 Windows 上提供了一个方便、安全、功能完备的远程管理工具。它的中文支持和自定义功能让其适合国内 Linux 系统管理者使用。与 Xshell 等软件相比,FinalShell 更注重功能实用性。 参考其它博主的安装教程,链接为:添加链接描述 下载FinalShell安装包的链接:添加链接

    2024年02月12日
    浏览(69)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包