I piced this together some years ago with examples from books and a few other sites, hope it helps you.
ConLib.h
Code:
/* 'ConLibf.h' */
#pragma once
#include <windows.h>
#include <iostream>
enum ConColor
{
ConBlack = 0,
ConRed = 1,
ConGreen = 2,
ConYellow = 3,
ConBlue = 4,
ConPurple = 5,
ConCyan = 6,
ConWhite = 7,
};
class ConObject
{
public:
WORD m_TextColor;
WORD m_BackgroundColor;
COORD Position;
ConObject();
~ConObject();
void SetBackgroundColor(WORD Color);
void SetTextColor (WORD Color);
void SetDefaultColor ();
void SetPosition (COORD Position);
void SetPosition (WORD x, WORD y);
std::string data;
};
class ConLib: public ConObject
{
private:
// Screen and keyboard handles
HANDLE m_Screen;
HANDLE m_Keyboard;
public:
ConLib();
~ConLib();
// Set attributes
void SetTitle (char* Title);
// Output methods
void Clear(void);
void OutputString( char* String);
// Input methods
void Read( char* Buffer, DWORD BufferSize);
__int32 GetKey(void);
ConLib & operator << (COORD Pos);
ConLib & operator << (char* pString);
ConLib & operator >> (__int32& key);
ConLib & operator << (ConObject& obj);
};
ConLib.cpp
Code:
/* 'ConLib.cpp' */
#include "ConLib.h"
////////////////////
// ConObject //
////////////////////
ConObject::ConObject()
{
m_TextColor = ConWhite;
m_BackgroundColor = ConBlack;
}
ConObject::~ConObject()
{
}
//Set BackGround Color
void ConObject::SetBackgroundColor( WORD Color )
{
m_BackgroundColor = 0;
if ( Color & ConRed )
m_BackgroundColor |= BACKGROUND_RED;
if ( Color & ConGreen )
m_BackgroundColor |= BACKGROUND_GREEN;
if ( Color & ConBlue)
m_BackgroundColor |= BACKGROUND_BLUE;
}
//Set Text Color
void ConObject::SetTextColor( WORD Color )
{
m_TextColor = 0;
if ( Color & ConRed )
m_TextColor |= FOREGROUND_RED;
if ( Color & ConGreen )
m_TextColor |= FOREGROUND_GREEN;
if ( Color & ConBlue)
m_TextColor |= FOREGROUND_BLUE;
}
//Set default black and white colors
void ConObject::SetDefaultColor()
{
this->SetBackgroundColor( ConBlack );
this->SetTextColor( ConWhite );
}
//Set Cursor position
void ConObject::SetPosition( COORD Pos )
{
Position = Pos;
}
void ConObject::SetPosition( WORD x, WORD y )
{
COORD xy;
xy.X = x;
xy.Y = y;
this->SetPosition(xy);
}
////////////////////
// ConLib //
////////////////////
ConLib::ConLib()
{
m_Screen = GetStdHandle( STD_OUTPUT_HANDLE );
m_Keyboard = GetStdHandle( STD_INPUT_HANDLE );
this->SetTextColor( ConWhite );
this->SetBackgroundColor( ConBlack );
}
ConLib::~ConLib()
{
}
//Set Window Title
void ConLib::SetTitle( char* Title )
{
SetConsoleTitle( Title );
}
//Clear the screen
void ConLib::Clear(void)
{
COORD Start;
DWORD Written;
WORD Color = 0;
Start.X = 0;
Start.Y = 0;
FillConsoleOutputAttribute( m_Screen, Color,
80*25, Start, &Written );
FillConsoleOutputCharacter( m_Screen, ' ', 80*25, Start, &Written );
SetConsoleCursorPosition( m_Screen, Start );
this->data.clear();
}
//Print a string to the screen
void ConLib::OutputString( char* String )
{
DWORD Written;
WriteConsole( m_Screen, String, (DWORD)strlen(String), &Written, NULL );
}
// Read a string from the keyboard
void ConLib::Read( char* Buffer, DWORD BufferSize)
{
DWORD Read;
ReadConsole( m_Keyboard, Buffer, BufferSize, &Read, NULL);
}
// Get a key from the keyboard
__int32 ConLib::GetKey(void)
{
DWORD Read;
INPUT_RECORD Event;
if( GetNumberOfConsoleInputEvents( m_Keyboard, &Read) ){
if( Read ){
ReadConsoleInput( m_Keyboard, &Event, 1, &Read);
if( Event.EventType == KEY_EVENT )
{
if( Event.Event.KeyEvent.bKeyDown )
return Event.Event.KeyEvent.wVirtualKeyCode;
}
}
}
return 0;
}
ConLib & ConLib::operator << (COORD Position)
{
this->SetPosition( Position );
return * this;
}
ConLib & ConLib::operator << (char* pString)
{
this->data.append( pString );
return * this;
}
ConLib & ConLib::operator >> (__int32& key)
{
key = this->GetKey();
return * this;
}
ConLib & ConLib::operator << (ConObject& obj)
{
SetConsoleTextAttribute( m_Screen, obj.m_TextColor | obj.m_BackgroundColor );
SetConsoleTextAttribute( m_Screen, obj.m_TextColor | obj.m_BackgroundColor );
SetConsoleCursorPosition( m_Screen, obj.Position );
this->OutputString( (char*)obj.data.c_str() );
return * this;
}