今天,让我们来谈谈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++看做自己的领地
看做
不断探索周边的知识海洋!!!
有 猿 加入,成为群体,共同探索!!!
好了,完事!
如果我讲得不好:
有问题私信我