700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > C语言控制台窗口界面编程:printf格式化显示-修改字符字体 颜色和背景

C语言控制台窗口界面编程:printf格式化显示-修改字符字体 颜色和背景

时间:2019-07-28 16:19:49

相关推荐

C语言控制台窗口界面编程:printf格式化显示-修改字符字体 颜色和背景

环境:cygwin-Linux+GCC

PS:windows的cmd下不能实现。

在linux终端中一个ls指令得出的显示结果文件夹、文件以及不同操作权限的文件的显示颜色是不同的,那么这个是如何实现的呢?

从上图中看到的,不同的颜色信息有助于判断不同的文件类型。以下面的printf格式化输出为例:

#include<stdio.h>#include<stdlib.h>int main(int argc, char **argv){printf("\033[1m加粗\033[m\n");printf("\033[1;30m加粗黑色字体\033[m\n");printf("\033[1;30;41m加粗黑色字体红色背景\033[m\n");printf("\033[3m斜体\033[m\n");printf("\033[3;34m斜体深蓝色字体\033[m\n");printf("\033[3;34;47m斜体深蓝色字体白色背景\033[m\n");printf("\033[9m删除线\033[m\n");printf("\033[9;35m删除线紫色字体\033[m\n");printf("\033[9;35;43m删除线紫色字体黄色背景\033[m\n");}

得到的输出结果为:

这是一个格式化输出的结果,其格式化为(原文链接):

/* \033[字符的显示方式;字符的颜色;字符的背景颜色m 需要显示的字符 \033[m *//* 字符的显示方式:0(默认值)、1(加粗)、2(灰显)、3(斜体)、4(下划线)、7(反显)、9(删除线)字符的颜色:30(黑色)、31(红色)、32(绿色)、 33(黄色)、34(深蓝色)、35(紫色)、36(浅蓝色)、37(白色)字符的背景颜色:40(黑色)、41(红色)、42(绿色)、 43(黄色)、44(蓝色)、45(紫色)、46(浅蓝色)、47(白色) */

当然也可以这么做:

#include<stdio.h>#include<stdlib.h>int main(int argc, char **argv){int fontShowWay=0, fontColor, backgroundColor, count = 0;for ( fontShowWay = 0; fontShowWay <= 9; fontShowWay ++)for( fontColor = 30; fontColor <= 37; fontColor ++)for ( backgroundColor = 40; backgroundColor <= 47; backgroundColor ++) {count ++;printf("\033[%d;%d;%dm Hello World ! \033[m",fontShowWay, fontColor, backgroundColor);if(count%10 == 0)printf("\n");}}

此外,这里有一篇文章:C语言控制台窗口图形界面编程(三)

在windows系统下进行的字体变换,但是不太好理解。

#include <stdio.h> #include <stdlib.h> #include <windows.h> #include <conio.h> /* 基本文本属性 FOREGROUND_BLUE 蓝色 FOREGROUND_GREEN 绿色 FOREGROUND_RED 红色 FOREGROUND_INTENSITY 加强 BACKGROUND_BLUE 蓝色背景 BACKGROUND_GREEN 绿色背景 BACKGROUND_RED 红色背景 BACKGROUND_INTENSITY 背景色加强 COMMON_LVB_REVERSE_VIDEO 反色 */ const WORD FORE_BLUE = FOREGROUND_BLUE; //蓝色文本属性 const WORD FORE_GREEN = FOREGROUND_GREEN;//绿色文本属性 const WORD FORE_RED = FOREGROUND_RED; //红色文本属性 const WORD FORE_PURPLE = FORE_BLUE | FORE_RED;//紫色文本属性 const WORD FORE_CYAN = FORE_BLUE | FORE_GREEN; //青色文本属性 const WORD FORE_YELLOW = FORE_RED | FORE_GREEN;//黄色文本属性 const WORD FORE_GRAY = FOREGROUND_INTENSITY;//灰色文本属性 const WORD BACK_BLUE = BACKGROUND_BLUE; //蓝色背景属性 const WORD BACK_GREEN = BACKGROUND_GREEN;//绿色背景属性 const WORD BACK_RED = BACKGROUND_RED; //绿色背景属性 const WORD BACK_PURPLE = BACK_BLUE | BACK_RED;//紫色背景属性 const WORD BACK_CYAN = BACK_BLUE | BACK_GREEN; //青色背景属性 const WORD BACK_YELLOW = BACK_RED | BACK_GREEN;//黄色背景属性 const WORD BACK_GRAY = BACKGROUND_INTENSITY;//灰色背景属性 int main() { HANDLE handle_out = GetStdHandle(STD_OUTPUT_HANDLE); //获得标准输出设备句柄 CONSOLE_SCREEN_BUFFER_INFO csbi; //定义窗口缓冲区信息结构体 GetConsoleScreenBufferInfo(handle_out, &csbi);//获得窗口缓冲区信息 SetConsoleTextAttribute(handle_out, FORE_BLUE); printf("蓝色\n"); SetConsoleTextAttribute(handle_out, FORE_RED); printf("红色字符\n"); SetConsoleTextAttribute(handle_out, FORE_GREEN); printf("绿色字符\n"); SetConsoleTextAttribute(handle_out, FORE_PURPLE); printf("紫色字符\n"); SetConsoleTextAttribute(handle_out, FORE_CYAN); printf("青色字符\n"); SetConsoleTextAttribute(handle_out, FORE_YELLOW); printf("黄色字符\n"); SetConsoleTextAttribute(handle_out, FORE_GRAY); printf("灰色字符\n"); SetConsoleTextAttribute(handle_out, FORE_GREEN | FORE_BLUE | FORE_RED); printf("白色字符\n"); SetConsoleTextAttribute(handle_out, BACK_BLUE); printf("蓝色背景\n"); SetConsoleTextAttribute(handle_out, BACK_RED); printf("红色背景\n"); SetConsoleTextAttribute(handle_out, BACK_GREEN); printf("绿色背景\n"); SetConsoleTextAttribute(handle_out, BACK_PURPLE); printf("紫色背景\n"); SetConsoleTextAttribute(handle_out, BACK_CYAN); printf("青色背景\n"); SetConsoleTextAttribute(handle_out, BACK_YELLOW); printf("黄色背景\n"); SetConsoleTextAttribute(handle_out, BACK_GRAY); printf("灰色背景\n"); SetConsoleTextAttribute(handle_out, BACK_BLUE | BACK_RED | BACK_GREEN); printf("白色背景\n"); SetConsoleTextAttribute(handle_out, BACK_GREEN | FORE_RED); //示例:绿色背景红色字符 printf("绿色背景与红色字符的混合\n"); SetConsoleTextAttribute(handle_out, FOREGROUND_INTENSITY | FORE_RED); //示例:亮红色字符 printf("亮色的生成,与加强色融合\n"); return 0; }

编译与运行:

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。