Add Implements of ColorUI

This commit is contained in:
Kirigaya Kazuto 2017-05-14 13:50:33 +08:00
parent bf37819aa3
commit 3a43697243
2 changed files with 163 additions and 32 deletions

View File

@ -1,5 +1,6 @@
#include "ColorUI.h" #include "ColorUI.h"
#include <windows.h> #include <windows.h>
#include <conio.h>
namespace _ColorUI_Internal_Namespace namespace _ColorUI_Internal_Namespace
{ {
@ -10,70 +11,195 @@ public:
_auto_init_console_info_class() _auto_init_console_info_class()
{ {
hout=GetStdHandle(STD_OUTPUT_HANDLE); hout=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_SCREEN_BUFFER_INFO tinfo; CONSOLE_SCREEN_BUFFER_INFO tInfo;
GetConsoleScreenBufferInfo(hout,&tInfo); GetConsoleScreenBufferInfo(hout,&tInfo);
color=tinfo.wAttributes; color=tInfo.wAttributes;
} }
HANDLE hout; HANDLE hout;
WORD color; WORD color;
}_auto_init_console_info_obj; }_auto_init_console_info_obj;
void cprint(ConsoleColor FrontColor,ConsoleColor BackColor) inline ConsoleColor _winColor2ConsoleColor(int winColor)
{ {
int iFront=0; switch(winColor)
int iBack=0; {
switch(FrontColor) case 0:
return ConsoleColor::black;
case FOREGROUND_BLUE:
case BACKGROUND_BLUE:
return ConsoleColor::blue;
case FOREGROUND_GREEN:
case BACKGROUND_GREEN:
return ConsoleColor::green;
case FOREGROUND_RED:
case BACKGROUND_RED:
return ConsoleColor::red;
case FOREGROUND_GREEN | FOREGROUND_BLUE:
case BACKGROUND_GREEN | BACKGROUND_BLUE:
return ConsoleColor::lightblue;
case FOREGROUND_RED | FOREGROUND_BLUE:
case BACKGROUND_RED | BACKGROUND_BLUE:
return ConsoleColor::purple;
case FOREGROUND_RED | FOREGROUND_GREEN:
case BACKGROUND_RED | BACKGROUND_GREEN:
return ConsoleColor::yellow;
case FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED:
case BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED:
return ConsoleColor::white;
}
}
inline int _ConsoleColor2winForeColor(ConsoleColor conColor)
{
switch(conColor)
{ {
case ConsoleColor::black: case ConsoleColor::black:
iFront=0;break; return 0;
case ConsoleColor::blue: case ConsoleColor::blue:
iFront=FOREGROUND_BLUE;break; return FOREGROUND_BLUE;
case ConsoleColor::lightblue:
iFront=FOREGROUND_GREEN | FOREGROUND_BLUE;break;
case ConsoleColor::green: case ConsoleColor::green:
iFront=FOREGROUND_GREEN;break; return FOREGROUND_GREEN;
case ConsoleColor::purple:
iFront=FOREGROUND_RED |FOREGROUND_BLUE;break;
case ConsoleColor::red: case ConsoleColor::red:
iFront=FOREGROUND_RED;break; return FOREGROUND_RED;
case ConsoleColor::white: case ConsoleColor::lightblue:
iFront=FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED; break; return FOREGROUND_GREEN | FOREGROUND_BLUE;
case ConsoleColor::purple:
return FOREGROUND_RED |FOREGROUND_BLUE;
case ConsoleColor::yellow: case ConsoleColor::yellow:
iFront=FOREGROUND_RED | FOREGROUND_GREEN;break; return FOREGROUND_RED | FOREGROUND_GREEN;
case ConsoleColor::white:
return FOREGROUND_BLUE | FOREGROUND_GREEN | FOREGROUND_RED;
} }
switch(BackColor) }
inline int _ConsoleColor2winBackColor(ConsoleColor conColor)
{
switch(conColor)
{ {
case ConsoleColor::black: case ConsoleColor::black:
iBack=0;break; return 0;
case ConsoleColor::blue: case ConsoleColor::blue:
iBack=BACKGROUND_BLUE;break; return BACKGROUND_BLUE;
case ConsoleColor::lightblue:
iBack=BACKGROUND_GREEN | BACKGROUND_BLUE;break;
case ConsoleColor::green: case ConsoleColor::green:
iFront=BACKGROUND_GREEN;break; return BACKGROUND_GREEN;
case ConsoleColor::purple:
iBack=BACKGROUND_RED | BACKGROUND_BLUE;break;
case ConsoleColor::red: case ConsoleColor::red:
iBack=BACKGROUND_RED;break; return BACKGROUND_RED;
case ConsoleColor::white: case ConsoleColor::lightblue:
iBack=BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED; break; return BACKGROUND_GREEN | BACKGROUND_BLUE;
case ConsoleColor::purple:
return BACKGROUND_RED | BACKGROUND_BLUE;
case ConsoleColor::yellow: case ConsoleColor::yellow:
iBack=BACKGROUND_RED | BACKGROUND_GREEN;break; return BACKGROUND_RED | BACKGROUND_GREEN;
case ConsoleColor::white:
return BACKGROUND_BLUE | BACKGROUND_GREEN | BACKGROUND_RED;
} }
}
inline void cprint(ConsoleColor FrontColor,ConsoleColor BackColor)
{
int iFront=_ConsoleColor2winBackColor(FrontColor);
int iBack=_ConsoleColor2winBackColor(BackColor);
if(iFront!=0) iFront=iFront | FOREGROUND_INTENSITY; if(iFront!=0) iFront=iFront | FOREGROUND_INTENSITY;
if(iBack!=0) iBack=iBack| BACKGROUND_INTENSITY; if(iBack!=0) iBack=iBack| BACKGROUND_INTENSITY;
SetConsoleTextAttribute(_auto_init_console_info_obj.hout,iFront | iBack ); SetConsoleTextAttribute(_auto_init_console_info_obj.hout,iFront | iBack );
} }
void cprint() inline void cprint()
{ {
SetConsoleTextAttribute(_auto_init_console_info_obj.hout,_auto_init_console_info_obj.color); SetConsoleTextAttribute(_auto_init_console_info_obj.hout,_auto_init_console_info_obj.color);
} }
int _last_keyval;
int _GetUserInputKey_Real()
{
return _last_keyval=getch();///defined in conio.h
}
enum class KEY { UNDEF=0, UP, DOWN, LEFT, RIGHT, CONFIRM, ESC, HOME, END };
int _last_isSpecial;
KEY GetUserInputKey()
{
int a=_GetUserInputKey_Real();
if(a==224||a==0)
{
_last_isSpecial=1;
int b=_GetUserInputKey_Real();
switch(b)
{
case 72:return KEY::UP;
case 80:return KEY::DOWN;
case 75:return KEY::LEFT;
case 77:return KEY::RIGHT;
case 71:return KEY::HOME;
case 79:return KEY::END;
default:return KEY::UNDEF;
}
}
else
{
_last_isSpecial=0;
switch(a)
{
case ' ':case '\r':case '\n':case '5':
return KEY::CONFIRM;
case 'w':case 'W':case '8':
return KEY::UP;
case 's':case 'S':case '2':
return KEY::DOWN;
case 'a':case 'A':case '4':
return KEY::LEFT;
case 'd':case 'D':case '6':
return KEY::RIGHT;
case 27:
return KEY::ESC;
default:
return KEY::UNDEF;
}
}
}
int GetAction(int& cid,int MinVal,int MaxVal,int EscapeVal=MaxVal)
{
KEY t=GetUserInputKey();
switch(t)
{
case KEY::UP:
{
cid=std::max(std::min(cid-1,MaxVal),MinVal);
return 0;
}
case KEY::DOWN:
{
cid=std::max(std::min(cid+1,MaxVal),MinVal);
return 0;
}
case KEY::ESC:
{
cid=EscapeVal;
return 0;
}
case KEY::CONFIRM:
return 1;
case KEY::HOME:
{
cid=MinVal;
return 0;
}
case KEY::END:
{
cid=MaxVal;
return 0;
}
default:
return 0;
}
}
}/// End of namespace _ColorUI_Internal_Namespace }/// End of namespace _ColorUI_Internal_Namespace
ColorSelection::ColorSelection() ColorSelection::ColorSelection()
{ {
frontColor=ConsoleColor::white;
backColor=ConsoleColor::black;
} }

View File

@ -1,8 +1,13 @@
#pragma once #pragma once
#include <string> #include <string>
#include <list>
#include <stack>
enum class ConsoleColor { black=0,red=1,green=2,yellow=3,blue=4,purple=5,lightblue=6,deepgreen=6,white=7 }; enum class ConsoleColor { black=0,red=1,green=2,yellow=3,blue=4,purple=5,lightblue=6,deepgreen=6,white=7 };
/// Fwd DECL
class ColorFrame;
class ColorSelection class ColorSelection
{ {
public: public: