Skip to content

Instantly share code, notes, and snippets.

@LusainKim
Last active March 6, 2016 09:28
Show Gist options
  • Select an option

  • Save LusainKim/882cd024d264a3adb9a3 to your computer and use it in GitHub Desktop.

Select an option

Save LusainKim/882cd024d264a3adb9a3 to your computer and use it in GitHub Desktop.
Console Utility
/////////////////////////////////////////////////////
// consoleUtil.h
// 콘솔에서 사용함직한 함수들을 모아 정리해봤습니다.
/////////////////////////////////////////////////////
#pragma once
namespace ConsoleUtil {
// Windows.h 가 포함됐다면 두 번 연결할 필요는 없다
#ifndef _WINDOWS_
#include <windows.h>
#endif
#include <conio.h>
#define TEXTCOLOR_RED (FOREGROUND_RED | FOREGROUND_INTENSITY)
#define TEXTCOLOR_GREEN (FOREGROUND_GREEN | FOREGROUND_INTENSITY)
#define TEXTCOLOR_BLUE (FOREGROUND_BLUE | FOREGROUND_INTENSITY)
#define TEXTCOLOR_CYAN (FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
#define TEXTCOLOR_YELLOW (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_INTENSITY)
#define TEXTCOLOR_ORIGIN (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE)
#define TEXTCOLOR_WHITE (FOREGROUND_RED | FOREGROUND_GREEN | FOREGROUND_BLUE | FOREGROUND_INTENSITY)
#define ConsoleUtil_consoleHandler (HANDLE)GetStdHandle(STD_OUTPUT_HANDLE)
// 텍스트의 색상을 변경합니다. 기본 색은 다음과 같습니다 :
// TEXTCOLOR_RED : 밝은 빨간색입니다.
// TEXTCOLOR_GREEN : 밝은 초록색입니다.
// TEXTCOLOR_BLUE : 밝은 파랑색입니다.
// TEXTCOLOR_CYAN : 밝은 하늘색입니다.
// TEXTCOLOR_YELLOW : 밝은 노란색입니다.
// TEXTCOLOR_WHITE : 밝은 하얀색입니다.
inline void SetTextColor(WORD colors) { SetConsoleTextAttribute(ConsoleUtil_consoleHandler, colors); }
//원하는 위치로 캐럿을 옮길 수 있습니다.
inline int gotoxy(int x, int y)
{
if (ConsoleUtil_consoleHandler == INVALID_HANDLE_VALUE)
return 0;
COORD coords = { (short)(x), (short)(y) };
SetConsoleCursorPosition(ConsoleUtil_consoleHandler, coords);
return 1;
}
// 현재 캐럿의 x 위치입니다.
inline int wherex()
{
if (ConsoleUtil_consoleHandler == INVALID_HANDLE_VALUE)
return 0;
CONSOLE_SCREEN_BUFFER_INFO screenInfo;
GetConsoleScreenBufferInfo(ConsoleUtil_consoleHandler, &screenInfo);
return screenInfo.dwCursorPosition.X;
}
// 현재 캐럿의 x 위치입니다.
inline int wherey()
{
if (ConsoleUtil_consoleHandler == INVALID_HANDLE_VALUE)
return 0;
CONSOLE_SCREEN_BUFFER_INFO screenInfo;
GetConsoleScreenBufferInfo(ConsoleUtil_consoleHandler, &screenInfo);
return screenInfo.dwCursorPosition.Y;
}
// 현재 콘솔의 x 최대값입니다.
inline int bufferMaxX()
{
if (ConsoleUtil_consoleHandler == INVALID_HANDLE_VALUE)
return 0;
CONSOLE_SCREEN_BUFFER_INFO screenInfo;
GetConsoleScreenBufferInfo(ConsoleUtil_consoleHandler, &screenInfo);
return screenInfo.dwMaximumWindowSize.X;
}
// 현재 콘솔의 y 최대값입니다.
inline int bufferMaxY()
{
if (ConsoleUtil_consoleHandler == INVALID_HANDLE_VALUE)
return 0;
CONSOLE_SCREEN_BUFFER_INFO screenInfo;
GetConsoleScreenBufferInfo(ConsoleUtil_consoleHandler, &screenInfo);
return screenInfo.dwMaximumWindowSize.Y;
}
// 시간 측정을 편하게 하는 매크로
// c++ iostream, chrono 필요
// chrono::system_clock::time_point nCurrentTime;
// chrono::duration<double> cftimeElapsed;
//
// start_timer(nCurrentTime);
//
// TODO : 원하는 작업
//
// check_duration(cftimeElapsed, nCurrentTime);
#define start_timer(timer) ((timer) = std::chrono::system_clock::now())
#define check_duration(duration, timer) ((duration) = std::chrono::system_clock::now() - (timer))
};
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment