我写了一段程序(如下)
#include<bits/stdc++.h>
#include<Windows.h>
#include<conio.h>
using namespace std;
int getch__(){
if(_kbhit()){
return getch();
}
return -1;
}
bool keys(int x){
return (GetAsyncKeyState(x)&0x8000);
}
int Get_key(){
char ch=getch__();
if(ch==-32||ch==0){
return getch__();
}
return ch;
}
int Wait_Get_key(){
char ch=getch();
if(ch==-32||ch==0){
return getch();
}
return ch;
}
bool KeyDown(int x){
return(Get_key()==x);
}
bool Wait_KeyDown(int x){
return(Wait_Get_key()==x);
}
bool MouseDown(short x){
switch(x){
case 1:
return keys(0x01);
break;
case 2:
return keys(0x04);
break;
case 3:
return keys(0x02);
break;
}
}
int color(short r,short g,short b,char c){
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
if(hOut==INVALID_HANDLE_VALUE){
return GetLastError();
}
DWORD dwMode=0;
if(!GetConsoleMode(hOut,&dwMode)){
return GetLastError();
}
dwMode|=0x0004;
if(!SetConsoleMode(hOut,dwMode)){
return GetLastError();
}
wprintf(L"\x1b[38;2;%d;%d;%dm%c",r,g,b,c);
}
int change_color(short r,short g,short b){
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
if(hOut==INVALID_HANDLE_VALUE){
return GetLastError();
}
DWORD dwMode=0;
if(!GetConsoleMode(hOut,&dwMode)){
return GetLastError();
}
dwMode|=0x0004;
if(!SetConsoleMode(hOut,dwMode)){
return GetLastError();
}
wprintf(L"\x1b[38;2;%d;%d;%dm",r,g,b);
}
void colors(short r,short g,short b,string c,int Sleeps){
for(int i=0;i<c.size();i++){
color(r,g,b,c[i]);
Sleep(Sleeps);
}
}
struct position{
int x,y;
};
position to_get_Mouse(){
POINT p;
CONSOLE_FONT_INFO a;
GetCursorPos(&p);
ScreenToClient(GetForegroundWindow(),&p);
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),FALSE,&a);
return {p.x/a.dwFontSize.X,p.y/a.dwFontSize.Y};
}
void move_to(position pos){
HANDLE hout;
COORD coord;
coord.X=pos.x;
coord.Y=pos.y;
hout=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hout,coord);
}
position to_get() {
HANDLE hStdout;
CONSOLE_SCREEN_BUFFER_INFO pBuffer;
hStdout=GetStdHandle(STD_OUTPUT_HANDLE);
GetConsoleScreenBufferInfo(hStdout, &pBuffer);
return {pBuffer.dwCursorPosition.X,pBuffer.dwCursorPosition.Y};
}
void HideCursor(){
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle,&CursorInfo);
CursorInfo.bVisible=false;
SetConsoleCursorInfo(handle,&CursorInfo);
}
void ShowCursor(){
HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
CONSOLE_CURSOR_INFO CursorInfo;
GetConsoleCursorInfo(handle,&CursorInfo);
CursorInfo.bVisible=true;
SetConsoleCursorInfo(handle,&CursorInfo);
}
void cool_char(int change_range,char x,int change_char_time,short r,short g,short b){
x-=change_range;
for(int i=0;i<change_range;i++){
color(r,g,b,x+i);
Sleep(change_char_time);
int m_x=to_get().x,m_y=to_get().y;
move_to({m_x-1,m_y});
}
color(r,g,b,x+change_range);
}
void prints(string str,int Sleeps,short r=256,short g=256,short b=256,bool colorclear=true,bool change_char=true,string cursor="_",int change_char_time=5,bool clear_cursor=true,int change_range=5){
HideCursor();
for(int i=0;i<str.size();i++){
if(str[i]=='\n'){
for(int i=0;i<cursor.size();i++){
cout<<" ";
}
cout<<'\n';
}
else{
if(change_char){
cool_char(change_range,str[i],change_char_time,r,g,b);
}
else{
color(r,g,b,str[i]);
}
colors(r,g,b,cursor,0);
}
Sleep(Sleeps);
int m_x=to_get().x,m_y=to_get().y;
move_to({m_x-cursor.size(),m_y});
}
if(clear_cursor){
position last=to_get();
for(int i=0;i<cursor.size();i++){
cout<<" ";
}
move_to(last);
}
if(colorclear){
change_color(256,256,256);
}
}
void change_console_char(position positions,char change_char,bool go_back=true){
position last=to_get();
move_to(positions);
cout<<change_char;
if(go_back){
move_to(last);
}
}
int randint(int start,int end){
return rand()%(start+end)+start;
}
void Close_stop(){
auto hStdin=GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin,&mode);
mode&=~ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin,mode);
}
void Start_stop(){
auto hStdin=GetStdHandle(STD_INPUT_HANDLE);
DWORD mode;
GetConsoleMode(hStdin,&mode);
mode=ENABLE_QUICK_EDIT_MODE;
SetConsoleMode(hStdin,mode);
}
string int_to_string(long long x){
stringstream K;
K<<x;
string a=K.str();
return a;
}
int main(){
Close_stop();
HideCursor();//45,11
prints("+==========================================+\n| |\n| |\n| |\n| |\n| |\n| |\n| |\n| |\n| |\n+==========================================+",0,-1,-1,-1,false,false);
int r=256,g=256,b=256;
while(1){
int xx=to_get_Mouse().x,yy=to_get_Mouse().y;
if(MouseDown(1)){
if(xx>0&&yy>0&&xx<43&&yy<10){
move_to({xx,yy});
color(r,g,b,'#');
}
if(xx==45){
if(yy==1){
r++;
if(KeyDown(72)){
r+=9;
}
}
if(yy==2){
g++;
if(KeyDown(72)){
g+=9;
}
}
if(yy==3){
b++;
if(KeyDown(72)){
b+=9;
}
}
if(yy==4){
move_to({0,0});
prints("+==========================================+\n| |\n| |\n| |\n| |\n| |\n| |\n| |\n| |\n| |\n+==========================================+",0,-1,-1,-1,false,false," ");
}
if(yy==5){
move_to({0,0});
prints("+==========================================+\n|##########################################|\n|##########################################|\n|##########################################|\n|##########################################|\n|##########################################|\n|##########################################|\n|##########################################|\n|##########################################|\n|##########################################|\n+==========================================+",0,-1,-1,-1,false,false," ");
}
}
}
if(MouseDown(3)){
if(xx>0&&yy>0&&xx<43&&yy<10){
move_to({xx,yy});
color(r,g,b,' ');
}
if(xx==45){
if(yy==1){
r--;
if(KeyDown(72)){
r-=9;
}
}
if(yy==2){
g--;
if(KeyDown(72)){
g-=9;
}
}
if(yy==3){
b--;
if(KeyDown(72)){
b-=9;
}
}
}
}
if(KeyDown(27)){
move_to({0,10});
break;
}
if(r<0){
r=0;
}
if(g<0){
g=0;
}
if(b<0){
b=0;
}
if(r>256){
r=256;
}
if(g>256){
g=256;
}
if(b>256){
b=256;
}
move_to({44,0});
colors(r,g,b," #",0);
move_to({44,1});
colors(256,0,0," #",0);
colors(256,256,256," r:"+int_to_string(r),0);
move_to({44,2});
colors(0,256,0," #",0);
colors(256,256,256," g:"+int_to_string(g),0);
move_to({44,3});
colors(0,0,256," #",0);
colors(256,256,256," b:"+int_to_string(b),0);
move_to({44,4});
colors(256,256,256," # black_clear",0);
move_to({44,5});
colors(256,256,256," # white_clear",0);
}
}
在Dev C++上,只要开启c++11即可正常使用(如下图)
但是转到sublime_text上却编译错误(如下图)
(无法使用GetCurrentConsoleFont??????
编译命令:
{
"shell_cmd": "g++ -finput-charset=UTF-8 -fexec-charset=GBK -Wall \"${file_name}\" -o \"${file_base_name}\" && start cmd /c \"\"${file_base_name}\" & pause\"",
"file_regex": "^(..[^:]*):([0-9]+):?([0-9]+)?:? (.*)$",
"working_dir": "${file_path}",
"selector": "source.c++",
"encoding": "gbk",
"variants":
[
{
"name": "Single File Build",
"shell_cmd": "g++ -finput-charset=UTF-8 -fexec-charset=GBK -Wall \"${file_name}\" -o \"${file_base_name}\""
},
{
"name": "Single File Run",
"shell_cmd": "start cmd /c \"\"${file_base_name}\" & pause\""
},
{
"name": "Single File Build & Run",
"shell_cmd": "g++ -finput-charset=UTF-8 -fexec-charset=GBK -Wall \"${file_name}\" -o \"${file_base_name}\" && start cmd /c \"\"${file_base_name}\" & pause\""
},
{
"name": "Multiple Files Build",
"shell_cmd": "g++ -finput-charset=UTF-8 -fexec-charset=GBK -Wall *.cpp -o \"${file_base_name}\""
},
{
"name": "Multiple Files Run",
"shell_cmd": "start cmd /c \"\"${file_base_name}\" & pause\""
},
{
"name": "Multiple Files Build & Run",
"shell_cmd": "g++ -finput-charset=UTF-8 -fexec-charset=GBK -Wall *.cpp -o \"${file_base_name}\" && start cmd /c \"\"${file_base_name}\" & pause\""
}
]
}
//————————————————
//版权声明:本文为CSDN博主「SY-Liu」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
//原文链接:https://blog.csdn.net/qq_45890382/article/details/117885025
求万能的谷民帮助!!