//By jingzhongrong
通过Win32API提供的函数,可以对控制台程序的输出进行控制,例如字体颜色、标题文字,以及各种属性等等。
主要使用到的函数以及声明如下:
HANDLE GetStdHandle(
DWORD nStdHandle
);
此函数用于获取控制台输出、输入句柄。得到句柄之后便可以对输出进行修改了。
下面是几个用于修改的函数,其他函数请查看MSDN获取更详细的说明。
//
用于获得当前控制台的输出属性,用于恢复。
BOOL GetConsoleScreenBufferInfo(
HANDLE hConsoleOutput,
PCONSOLE_SCREEN_BUFFER_INFO lpConsoleScreenBufferInfo
);
//用于修改输出字体颜色
BOOL SetConsoleTextAttribute(
HANDLE hConsoleOutput,
WORD wAttributes
);
更多函数请查找MSDN上Console Functions。
More information please look for MSDN with “Console Functions”.
以下是示例代码:
enum COLOR
{
blue = FOREGROUND_BLUE|FOREGROUND_INTENSITY,
green = FOREGROUND_GREEN|FOREGROUND_INTENSITY,
red = FOREGROUND_RED|FOREGROUND_INTENSITY,
bblue = BACKGROUND_BLUE|BACKGROUND_INTENSITY,
bgreen = BACKGROUND_GREEN|BACKGROUND_INTENSITY,
bred = BACKGROUND_RED|BACKGROUND_INTENSITY
};
HANDLE stdouthandle;
WORD oldincolorattr;
void writeln(COLOR color,char* s)
{
this->SetColor(color);
cout<<s<<endl;
this->SetDefault(1);
}
bool SetColor(COLOR colo)
{
if(!::SetConsoleTextAttribute(stdouthandle,color))
return false;
else
return true;
}//by jingzhongrong
bool SetDefault()
{
if(!::SetConsoleTextAttribute(stdouthandle, oldoutcolorattr))
return false;
else
return true;
}
void main()
{
stdouthandle = ::GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO csbiInfo;
::GetConsoleScreenBufferInfo(stdouthandle,&csbiInfo);
oldoutcolorattr = csbiInfo.wAttributes;
}