一段有趣又实用的控制台工具代码

来源:互联网 发布:床垫推荐 知乎 编辑:程序博客网 时间:2024/05/21 19:39

这段代码截取自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
(DWORD)-10

 

STD_OUTPUT_HANDLE
(DWORD)-11

 

STD_ERROR_HANDLE
(DWORD)-12

分别对应cin, cout和cerr

 

SetConsoleAttribute的原型如下:

BOOL WINAPI SetConsoleTextAttribute(  __in          HANDLE hConsoleOutput,  __in          WORD wAttributes );
第一个参数就是控制台输出地一个Handle,可以用上面的方法取到,第二个参数则是属性值,MSDN上给出的值如下:
AttributeMeaningFOREGROUND_BLUEText color contains blue.FOREGROUND_GREENText color contains green.FOREGROUND_REDText color contains red.FOREGROUND_INTENSITYText color is intensified.BACKGROUND_BLUEBackground color contains blue.BACKGROUND_GREENBackground color contains green.BACKGROUND_REDBackground color contains red.BACKGROUND_INTENSITYBackground color is intensified.COMMON_LVB_LEADING_BYTELeading byte.COMMON_LVB_TRAILING_BYTETrailing byte.COMMON_LVB_GRID_HORIZONTALTop horizontal.COMMON_LVB_GRID_LVERTICALLeft vertical.COMMON_LVB_GRID_RVERTICALRight vertical.COMMON_LVB_REVERSE_VIDEOReverse foreground and background attributes.COMMON_LVB_UNDERSCOREUnderscore.
        基本上就是这样了~~
原创粉丝点击