//====================================================================
// CConsole クラス
//--------------------------------------------------------------------
// 処理内容 : コンソールAPIの寄せ集め
// ファイル名 : Console.cpp
// 作成者 : Copyright(C) 2004 武千代
//====================================================================
#ifndef __CONSOLE_H__
#define __CONSOLE_H__
//====================================================================
// ヘッダファイルのインクルード
//====================================================================
#include <windows.h>
//====================================================================
// 列挙型
//====================================================================
enum {
L_BLACK, // 低輝度・黒色
L_BLUE, // 低輝度・青色
L_GREEN, // 低輝度・緑色
L_CYAN, // 低輝度・水色
L_RED, // 低輝度・赤色
L_PURPLE, // 低輝度・紫色
L_YELLOW, // 低輝度・黄色
L_WHITE, // 低輝度・白色
H_BLACK, // 高輝度・黒色
H_BLUE, // 高輝度・青色
H_GREEN, // 高輝度・緑色
H_CYAN, // 高輝度・水色
H_RED, // 高輝度・赤色
H_PURPLE, // 高輝度・紫色
H_YELLOW, // 高輝度・黄色
H_WHITE, // 高輝度・白色
};
//====================================================================
// コンソール入出力クラス
//====================================================================
class CConsole{
HANDLE m_hConsoleStdOut; // 出力コンソールのハンドル
public:
// コンストラクタ
CConsole()
{
// 出力コンソールのハンドルを取得
m_hConsoleStdOut = ::GetStdHandle(STD_OUTPUT_HANDLE);
}
// デストラクタ
~CConsole()
{
// ハンドルを取得していれば、ハンドルを閉じる
if(m_hConsoleStdOut != INVALID_HANDLE_VALUE)
::CloseHandle(m_hConsoleStdOut);
}
// カーソルのサイズと可視性を設定する
// 第1引数 : カーソルのサイズ(1 〜 100 %)
// 第2引数 : 可視性(TRUE or FALSE)
// 戻り値 : なし
void SetCursorInfo(DWORD dwSize = 25, BOOL bVisible = TRUE)
{
CONSOLE_CURSOR_INFO info;
info.dwSize = dwSize;
info.bVisible = bVisible;
::SetConsoleCursorInfo(m_hConsoleStdOut, &info);
}
// カーソルの位置をセットする
// 第1引数 : x座標
// 第2引数 : y座標
// 戻り値 : なし
void SetCursorPosition(short shXPos, short shYPos)
{
COORD coord;
coord.X = shXPos;
coord.Y = shYPos;
::SetConsoleCursorPosition(m_hConsoleStdOut, coord);
}
// 前景色・背景色を設定する
// 第1引数 : 前景色
// 第2引数 : 背景色
// 戻り値 : なし
void SetColor(WORD wFore = L_WHITE, WORD wBack = L_BLACK)
{
// 前景色・背景色属性を設定
::SetConsoleTextAttribute(m_hConsoleStdOut, wFore + (wBack << 4));
}
// 指定色で画面を消去する
// 第1引数 : 前景色
// 第2引数 : 背景色
// 戻り値 : なし
void Clear(WORD wFore = L_WHITE, WORD wBack = L_BLACK)
{
CONSOLE_SCREEN_BUFFER_INFO csbi;
DWORD dwNumberOfCharsWritten; // 書き込まれたセル数
COORD coord = {0, 0};
// コンソールスクリーンバッファに関する情報を取得
if(::GetConsoleScreenBufferInfo(m_hConsoleStdOut, &csbi))
{
// バッファ内の指定した座標から指定した数の文字セル分だけ、前景色と背景色を設定
::FillConsoleOutputAttribute(m_hConsoleStdOut, wFore + (wBack << 4),
csbi.dwSize.X * csbi.dwSize.Y, coord, &dwNumberOfCharsWritten);
// バッファ内の指定した座標から、指定した文字を指定した数だけ書き込む
::FillConsoleOutputCharacter(m_hConsoleStdOut, ' ',
csbi.dwSize.X * csbi.dwSize.Y, coord, &dwNumberOfCharsWritten);
}
}
};
#endif
//====================================================================
|