#include<windows.h>
#include<iostream>
#define KEY_DOWN(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
void gotoxy(int x,int y) {
COORD pos={y,x};
HANDLE hOut=GetStdHandle(STD_OUTPUT_HANDLE);
SetConsoleCursorPosition(hOut,pos);
}
class button{
public:
void set(string text,int x,int y){
gotoxy(x,y);
cout<<text;
t=text;
bx=x;
by=y;
bl=text.length();
}
bool press(){
POINT p;
int x,y;
CONSOLE_FONT_INFO a;
GetCursorPos(&p);
ScreenToClient(GetForegroundWindow(),&p);
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),FALSE,&a);
x=p.x/a.dwFontSize.X;
y=p.y/a.dwFontSize.Y;
if(y==by&&x>=bx&&x<=bx+bl&&KEY_DOWN(' '))return true;
return false;
}
bool tougch(){
POINT p;
int x,y;
CONSOLE_FONT_INFO a;
GetCursorPos(&p);
ScreenToClient(GetForegroundWindow(),&p);
GetCurrentConsoleFont(GetStdHandle(STD_OUTPUT_HANDLE),FALSE,&a);
x=p.x/a.dwFontSize.X;
y=p.y/a.dwFontSize.Y;
if(y==by&&x>=bx&&x<=bx+bl)return true;
return false;
}
void put_again(){
gotoxy(bx,by);
for(int i=1;i<=bl;i++)cout<<' ';
gotoxy(bx,by);
cout<<t;
}
private:
int bx,by,bl;
string t;
};
int main() {
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_INTENSITY|BACKGROUND_BLUE);
button b;
b.set("这里放按钮文字",5,5);
while(1){
if(b.tougch()){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE|FOREGROUND_GREEN|BACKGROUND_INTENSITY|BACKGROUND_RED|BACKGROUND_GREEN);
b.put_again();
while(b.tougch()){
if(b.press()){
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_INTENSITY|BACKGROUND_BLUE);
b.put_again();
return 0;
}
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|BACKGROUND_INTENSITY|BACKGROUND_BLUE);
b.put_again();
}
}
SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),7|0);
return 0;
}
简单的按钮类。
要注释exe告诉我