c++制作小按钮

今天,让我们来谈谈c++制作小按钮(good)

1.一般,你的程序是不是这样:

#include<bits/stdc++.h>
#include<windows.h> 
using namespace std;
int main()
{
	printf("1.给wxncc点赞\n2.关注wxncc\n");
	int a;
	cin>>a;//   或  a=getchar();  //输入单个字符
	if(a==1) cout<<"THANK YOU\n";
	else cout<<"THANK YOU SO MUCH\n"; 
}

2.稍有技术一点的     虽然我也是(因为很麻烦)  :

#include<bits/stdc++.h>
#include<windows.h> 
#define kd(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
using namespace std;
int main()
{
    printf("1.给wxncc点赞\n2.关注wxncc\n");
	while(1)
	{
		if(kd('1')||kd(VK_NUMPAD1)) 
		{
			cout<<"THANK YOU\n";
			break; 
		}
		if(kd('2')||kd(VK_NUMPAD2)) 
		{
			cout<<"THANK YOU SO MUCH\n";
			break;
		}
		Sleep(100);
	}
	Sleep(1000);
    return 0;
}

 

都不咋地

要实用:1~2(我推荐)

要质量:下面

讲解及代码

1.kd

首先,要判断是否按下鼠标

所以要用kd:点我

2.get_pos

求鼠标点击时的相对位置

3.gotoxy

移动按钮至指定位置

4.New

设置一个新按钮

5.kd_button

维护按钮(输出按钮+判断是否碰到按钮+判断是否)

代码:

#include<bits/stdc++.h>
#include<windows.h>
using namespace std;
#define kd(VK_NONAME) ((GetAsyncKeyState(VK_NONAME) & 0x8000) ? 1:0)
struct button{int x,y,c,len;string name;};
void color(int a)
{
/*亮白*/              if(a==0) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
/*蓝色*/              if(a==1) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN|FOREGROUND_BLUE);
/*绿色*/              if(a==2) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_GREEN);
/*紫色*/              if(a==3) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_BLUE);
/*红色*/              if(a==4) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED);
/*黄色*/              if(a==5) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_RED|FOREGROUND_GREEN);
/*深蓝色*/            if(a==6) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_INTENSITY|FOREGROUND_BLUE);
/*土黄色or金黄色*/    if(a==7) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN);
/*灰色接近白*/        if(a==8) SetConsoleTextAttribute(GetStdHandle(STD_OUTPUT_HANDLE),FOREGROUND_RED|FOREGROUND_GREEN|FOREGROUND_BLUE);
}
 
void noedit()
{
	HANDLE hStdin=GetStdHandle(STD_INPUT_HANDLE);
	DWORD mode;
	GetConsoleMode(hStdin,&mode);
	mode&=~ENABLE_QUICK_EDIT_MODE;
	mode&=~ENABLE_INSERT_MODE;
	mode&=~ENABLE_MOUSE_INPUT;
	SetConsoleMode(hStdin,mode);
}
 
void HideCursor()
{
	CONSOLE_CURSOR_INFO cur={1,0};
	SetConsoleCursorInfo(GetStdHandle(STD_OUTPUT_HANDLE),&cur);
}
 
button New(int X,int Y,int C,string N)
{
	button b;
	b.x=X,b.y=Y,b.c=C,b.name=N,b.len=N.size();//赋值,不用多说 
	return b;
}
 
void gotoxy(int x,int y)//移动光标 
{
	COORD pos;
	pos.X=y,pos.Y=x;
	SetConsoleCursorPosition(GetStdHandle(STD_OUTPUT_HANDLE),pos); 
	return ;
}
 
void get_pos(POINT &pt)//返回鼠标位置 
{
    HWND hwnd=GetForegroundWindow();
    GetCursorPos(&pt);//鼠标 
    ScreenToClient(hwnd,&pt);//查找鼠标在句柄上的位置 
	pt.y=pt.y/16,pt.x=pt.x/16;//不/16可以看一看会发生什么 
	return ;
}
 
bool kd_button(button zzb)//维护一个按钮 
{
    gotoxy(zzb.x,zzb.y),printf("%s",zzb.name.c_str());//输出 
    POINT pt;
    get_pos(pt);//获得鼠标位置 
    if(pt.y==zzb.x&&(pt.x>=zzb.y&&pt.x<=zzb.y+zzb.len/2))//如果碰到按钮 
	{
		color(zzb.c); 
    	gotoxy(zzb.x,zzb.y),printf("%s",zzb.name.c_str());//维护输出 
    	color(0);
		if(kd(MOUSE_MOVED)) return 1;//按到了 
	}
	return 0;//没按到 
}
 
int main()
{
	system("mode con cols=46 lines=20"); 
	HideCursor(),noedit(); 
	button b;//定义 
	b=New(10,20,4,"给wxncc点赞");//定义 
	//   坐标  颜色
	while(1)
	{
		if(kd_button(b)/*如果按下*/) break;
		Sleep(1);
	}
}

 最后,作为一名程序猿

把自己掌握的c++看做自己的领地

                                                                          看做 

 

不断探索周边的知识海洋!!!

有 猿 加入,成为群体,共同探索!!!

好了,完事!

如果我讲得不好:

点我

有问题私信我 

 

  • 2
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值