|
Dynamic Console Wrapper
Submitted by |
A while ago, there was some Tip Of The Days covering up dynamic console
windows and how to use them with coloring etc.
Until now, I found it rather useless, but now I (finally?) got a good use
for them, and I decided to wrap up the functionality within a class (I find
this a bit more useful).
To some of you, this might look as nonsense, since it only wraps
functionality, but I find it useful, and if you do, feel free to use it as
you want. It's all yours.
|
Currently browsing [dynconsole.zip] (2,459 bytes) - [win32util_console.h] - (2,902 bytes)
#ifndef CONSOLE_H
#define CONSOLE_H
#define WIN32_LEAN_AND_MEAN
#include <windows.h>
namespace Win32Util {
/**
* @class Console
* @brief Just opens a dynamic console and makes you write to it in colors etc.
*/
class Console {
private:
// Inited?
bool mInited;
// Console specific variables
HANDLE mHandle;
int mWidth;
int mHeight;
CONSOLE_CURSOR_INFO mCCI;
public:
// Color scheme, just use Console::black for istance, then calling set Color
enum Color {
black = 0,
blue = 1,
green = 2,
cyan = 3,
red = 4,
purple = 5,
brown = 6,
gray = 8,
light_gray = 7,
light_blue = 9,
light_green = 10,
light_cyan = 11,
light_red = 12,
pink = 13,
yellow = 14,
white = 15,
};
/**
* Constuctor
*/
Console();
/**
* Destructor
*/
~Console();
/**
* Opens a console window
*
* @param pWidth width of buffer
* @param pHeight height of buffer
*/
void open(const int pWidth=0, const int pHeight=0);
/**
* Closes the console window
*/
void close();
/**
* Clears a specific number of rows with the color specified
* in setColor(...).
*
* @param pRows Numer of rows (from top) to be cleared.
*/
void clear(const int pRows=-1);
/**
* Shows text carret
*/
void showCursor();
/**
* Hides text carret
*/
void hideCursor();
/**
* Set size of cursor, the height from bottom.
*
* @param pSize Size of carret in percent
*/
void setCursorSize(const int pSize=100);
/**
* Sets title of console window
*/
void setTitle(const char* pTitle);
/**
* Set color to use with the output commands
*
* @param pForegroundColor Color of text
* @param pBackgroundColor Color behind the text
*/
void setColor(const int pForegroundColor=light_green, const int pBackgroundColor=blue);
/**
* Move cursor (carret) to new position.
*
* @param pX New x (horisontal) position
* @param pY New y (vertical) position
*/
void locate(const int pX=0, const int pY=0);
/**
* Writes a message on screen at carret position.
* Note! Carret position is modified by this operation.
*
* @param pMessage The message in prinft kind of syntax
*/
void write(const char* pMessage, ...);
/**
* Writes a message on screen at specified position.
* Note! Carret position is modified by this operation.
*
* @param pX The x (horisontal) position
* @param pY The y (vertical) position
* @param pMessage The message in prinft kind of syntax
*/
void write(const int pX, const int pY, const char* pMessage, ...);
};
}
#endif
|
|
Currently browsing [dynconsole.zip] (2,459 bytes) - [win32util_console.cpp] - (4,524 bytes)
#include "win32util_console.h"
#include <stdarg.h>
#include <stdio.h>
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Win32Util::Console::Console() {
// Set inited to false
mInited=false;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
Win32Util::Console::~Console() {
// If window is open, close
if (mInited) close();
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::open(const int pWidth, const int pHeight) {
mWidth = pWidth;
mHeight = pHeight;
// Opens a console window
AllocConsole();
mHandle = GetStdHandle( STD_OUTPUT_HANDLE );
// If pWidth and pHeight is specified
if (pWidth*pHeight>0) {
// Set up a small rect
SMALL_RECT rect={0,0,pWidth,pHeight};
// Change size and 'absolue' the window (fixed size)
SetConsoleWindowInfo(mHandle, true, &rect);
// Set buffer equal to size so that no scrollbars appears
COORD coord={pWidth, pHeight};
SetConsoleScreenBufferSize(mHandle, coord);
}
// Hide cursor as default action
hideCursor();
setCursorSize(100);
// Set default color
setColor();
// Set inited to true (since the windowed is opened)
mInited=true;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::close() {
// Close the window
FreeConsole();
// Set inited to false (since the windowed is closed)
mInited=false;
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::clear(const int pRows) {
int rows = pRows;
if (pRows==-1) rows=mHeight;
// Go to upper left corner
locate(0,0);
// Make a string full of spaces equal the size of the window
char* empty = new char[mWidth];
memset(empty, ' ', mWidth);
// Write the string to the console
DWORD count;
for (int i=0; i<=rows; i++) {
WriteConsole(mHandle, empty, mWidth, &count, NULL);
}
// Clean up
delete empty;
// Go back to top left corner
locate(0,0);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::showCursor() {
// Set variables
mCCI.bVisible=TRUE;
// Set structure
SetConsoleCursorInfo(mHandle, &mCCI);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::hideCursor() {
// Set variables
mCCI.bVisible=FALSE;
// Set structure
SetConsoleCursorInfo(mHandle, &mCCI);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::setTitle(const char* pTitle) {
// Set title
SetConsoleTitle(pTitle);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::setCursorSize(const int pSize) {
// Set variable
mCCI.dwSize= pSize;
// Set structure
SetConsoleCursorInfo(mHandle, &mCCI);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::setColor(const int pForegroundColor, const int pBackgroundColor) {
// Set attribute (combine colors)
WORD attribute;
attribute = pForegroundColor | (pBackgroundColor<<4);
// Set color
SetConsoleTextAttribute(mHandle, attribute);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::locate(const int pX, const int pY) {
// Temporary
COORD coord={pX,pY};
// Set location
SetConsoleCursorPosition(mHandle, coord);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::write(const char* pMessage, ...) {
// Bind into one big string
char msg[1024];
va_list args;
va_start(args,pMessage);
vsprintf(msg,pMessage,args);
// Write to console
DWORD count;
WriteConsole(mHandle, msg, strlen(msg), &count, NULL);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
void Win32Util::Console::write(const int pX, const int pY, const char* pMessage, ...) {
// Move cursor
locate(pX, pY);
// Bind into one big string
char msg[1024];
va_list args;
va_start(args,pMessage);
vsprintf(msg,pMessage,args);
// Write to console
DWORD count;
WriteConsole(mHandle, msg, strlen(msg), &count, NULL);
}
// - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
|
|
The zip file viewer built into the Developer Toolbox made use
of the zlib library, as well as the zlibdll source additions.
|