最近在做一个类ftp的程序,我写界面实在是太垃圾了,所以选择用控制台程序实现。
调试服务端和客户端时,总是会出现各种问题,于是只好将可能出现错误的地方打印出来。随着日志打印的越来越频繁,Console窗口显示太多的内容,都是黑底白字,想找到错误的日志真是一件费力的事情。于是我就想,是不是可以在打印日志的时候,将错误提示的日志使用红色区分,这样就不用在茫茫的日志中苦苦找寻自己想要的那一条。
还好,Windows提供了API对Console的打印内容设置不同的字体颜色和背景颜色:
API:BOOL SetConsoleTextAttribute(HANDLE hConsoleOutput, WORD wAttributes);
其中,hConsoleOutput可以使用GetStdHandle(STD_OUTPUT_HANDLE)获取。对于wAttributes,Windows提供了设置项FOREGROUND_BLUE(0x1)、FOREGROUND_GREEN(0x2)、FOREGROUND_RED(0x4)、FOREGROUND_INTENSITY(0x8),从名字可以知晓,分别是蓝、绿、红和增强。正当我欣喜的时候,我发现这里面没有白色、也没有其他的颜色,仅仅3种颜色+一个增强。而Console是黑色背景,对白色字体有强烈需求,于是我百度查了一下,发现有些人直接将0 1 2 3...7作为实参进行设置。我有点蒙了,为什么可以呀。后来我想起了物理中说的三原色(红、绿、蓝),可以合成彩虹,这才豁然开朗。
具体的颜色可以自己设置的调一下,我这里主要记录一下常用的颜色(所有的颜色并上FOREGROUND_INTENSITY都可以增强):
0 黑色(完全没有,不就是黑色吗)
1 FOREGROUND_BLUE 蓝色
2 FOREGROUND_GREEN 绿色
4 FOREGROUND_RED 红色
7 FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED 白色(三原色合在一起就是白色)
实例演示截图: