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;
}