这段代码截取自Buckland老师的Programming Game AI by Example这本书的第二章,是一个很实用的控制台工具(ConsoleUntil),可以设置控制台的颜色,贴上来共享一下~~
--------------------------------------------------很无聊的分割线------------------------------------------------------------------------------
#ifndef CONSOLE_UTILS_H
#define CONSOLE_UTILS_H
//------------------------------------------------------------------------
//
// Name: ConsoleUtils.h
//
// Desc: Just a few handy utilities for dealing with consoles
//
// Author: Mat Buckland (fup@ai-junkie.com)
//
//------------------------------------------------------------------------
#include <windows.h>
#include <conio.h>
#include <iostream>
//default text colors can be found in wincon.h
inline void SetTextColor(WORD colors)
{
HANDLE hConsole=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleTextAttribute(hConsole, colors);
}
inline void PressAnyKeyToContinue()
{
//change text color to white
SetTextColor(FOREGROUND_BLUE| FOREGROUND_RED | FOREGROUND_GREEN);
std::cout << "/n/nPress any key to continue" << std::endl;
while (!_kbhit()){}
return;
}
#endif
----------------------------------------------------------------------------------------------------------------------------------------
其中只有两个简单的函数,第二个是一个PressAnyKeyToContinue的函数,非常的简单,不说明了~关键是第一个函数,SetTextColor,接受一个DWORD的参数作为颜色值,然后使用SetConsoleTextAttribute函数设置控制台颜色,他需要两个参数,分别是一个HANDLE,指向当前控制台,这个参数可以使用GetStdHandle来获得,第二个就是一个DWORD的颜色值。
各个函数的解释如下:(见MSDN)
GetStdHandle原型为
HANDLE WINAPI GetStdHandle( __in DWORD nStdHandle );
参数为一个Handle,可以是一下几个值之一:
STD_INPUT_HANDLE |
|
STD_OUTPUT_HANDLE |
|
STD_ERROR_HANDLE |
分别对应cin, cout和cerr
SetConsoleAttribute的原型如下:
BOOL WINAPI SetConsoleTextAttribute( __in HANDLE hConsoleOutput, __in WORD wAttributes );
第一个参数就是控制台输出地一个Handle,可以用上面的方法取到,第二个参数则是属性值,MSDN上给出的值如下:
Attribute | Meaning |
---|---|
FOREGROUND_BLUE | Text color contains blue. |
FOREGROUND_GREEN | Text color contains green. |
FOREGROUND_RED | Text color contains red. |
FOREGROUND_INTENSITY | Text color is intensified. |
BACKGROUND_BLUE | Background color contains blue. |
BACKGROUND_GREEN | Background color contains green. |
BACKGROUND_RED | Background color contains red. |
BACKGROUND_INTENSITY | Background color is intensified. |
COMMON_LVB_LEADING_BYTE | Leading byte. |
COMMON_LVB_TRAILING_BYTE | Trailing byte. |
COMMON_LVB_GRID_HORIZONTAL | Top horizontal. |
COMMON_LVB_GRID_LVERTICAL | Left vertical. |
COMMON_LVB_GRID_RVERTICAL | Right vertical. |
COMMON_LVB_REVERSE_VIDEO | Reverse foreground and background attributes. |
COMMON_LVB_UNDERSCORE | Underscore. |
基本上就是这样了~~