Add Implements of ColorUI
This commit is contained in:
parent
bf37819aa3
commit
3a43697243
190
ColorUI.cpp
190
ColorUI.cpp
@ -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;
|
|
||||||
}
|
}
|
||||||
|
@ -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:
|
||||||
|
Reference in New Issue
Block a user