一个按钮类……
  • 板块灌水区
  • 楼主吴明事
  • 当前回复2
  • 已保存回复2
  • 发布时间2021/11/28 12:22
  • 上次更新2023/11/3 23:22:31
查看原帖
一个按钮类……
378914
吴明事楼主2021/11/28 12:22
#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告诉我

2021/11/28 12:22
加载中...