cConsole.h
#pragma once
class cConsole
{
private:
CONSOLE_SCREEN_BUFFER_INFO m_info;
FILE* m_file;
HANDLE m_output;
public:
enum ConsoleTextColor {
ConsoleText_Red,
ConsoleText_Blue,
ConsoleText_Green,
};
public:
cConsole(void);
~cConsole(void);
bool Open(void);
void Close(void);
void SetConsoleTextColor(ConsoleTextColor color, bool isIntensity = false);
void ResetConsoleTextColor(void);
template<typename T> cConsole& operator << ( T val );
};
inline
void cConsole::ResetConsoleTextColor(void)
{
SetConsoleTextAttribute(m_output, m_info.wAttributes);
}
template<typename T>
inline
cConsole& cConsole::operator << ( T val ) {
cout << val;
return *this;
}
cConsole.cpp
#include "StdAfx.h"
#include "cConsole.h"
cConsole::cConsole(void)
{
}
cConsole::~cConsole(void)
{
}
bool cConsole::Open()
{
if (AllocConsole()) {
m_output = GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(m_output, &m_info);
freopen_s(&m_file, "CONOUT$";, "w+t", stdout);
return true;
} else
return false;
}
void cConsole::Close()
{
ResetConsoleTextColor();
FreeConsole();
}
void cConsole::SetConsoleTextColor(ConsoleTextColor color, bool isIntensity)
{
WORD attribute = 0;
switch(color) {
case ConsoleText_Red:
attribute = FOREGROUND_RED;
break;
case ConsoleText_Blue:
attribute = FOREGROUND_BLUE;
break;
case ConsoleText_Green:
attribute = FOREGROUND_GREEN;
break;
}
if (isIntensity)
attribute |= FOREGROUND_INTENSITY;
SetConsoleTextAttribute(m_output, attribute);
}