c++运行程序 鼠标点击按钮 (c++)(windows)
简介
这是在黑漆漆的程序中,制造用户可点击的按钮,来决定程序下一步该作什么,的基本代码。
详解
头文件
<cstdio>和<windows.h>
结构体
//这不全别复制
struct Button
{
int x,y,lenx,leny,color1,color0;
char * s;
bool nowpoint;
};
x和y是按钮左上角相对于当前窗口的位置(左右是x,上下是y)
lenx和leny按钮的长与宽(左右是x,上下是y)
color1和color0是鼠标否或是在按钮上时按钮的颜色
颜色详见 这个
s是输出的一个串
例如lenx=3,leny=3的按钮,是
a b c \\
d e f \\
g h i \\
\end{matrix}
\]
则s为"abcdefghi"
nowpoint不用管,用户用不到。
功能
| 代码 | 功能 |
|---|---|
| Button a | 新建一个按钮,默认为"none" |
| a.Print(···) | 输出a |
| a.SetButton(···) | 初始化并输出,返回时为串的长度是(1)否(0)符合规定 |
| a.Check(···) | 判断鼠标是(1)否(0)点击的a按钮 |
| a.Delete(···) | 删去a按钮,加引号的删除 |
细节
在Check的GetAsyncKeyState中
可选VK_RBUTTON(鼠标右键)或VK_LBUTTON(鼠标左键)
由于win10按左键会触发选择而不是按左键,所以win10推荐用右键
代码
#include <cstdio>
#include <windows.h>
using namespace std;
const HANDLE handle=GetStdHandle(STD_OUTPUT_HANDLE);
struct Button
{
int x,y,lenx,leny,color1,color0;
char * s;
bool nowpoint;
Button () ;
void Print(bool a=1,int Nowcolor=7);
bool SetButton (int x,int y,int lenx,int leny,int color1,int color0,const char s[],int Nowcolor=7);
bool Check(int Nowcolor=7);
void Delete();
};
Button::Button ()
{
x=y=0;
lenx=4;
leny=1;
color1=7;
color0=0x70;
nowpoint=0;
s=new char [4];
* s=* (s+2)='n';
* (s+1)='o';
* (s+3)='e';
}
void Button::Print(bool a,int Nowcolor)
{
if(a) SetConsoleTextAttribute(handle,this->color1);
else SetConsoleTextAttribute(handle,this->color0);
for(int i=0;i<this->leny;++i)
{
COORD pos = {this->x,this->y+i};
SetConsoleCursorPosition(handle,pos);
for(int j=0;j<this->lenx;++j)
{
printf("%c",*(this->s+i*lenx+j));
}
}
SetConsoleTextAttribute(handle,Nowcolor);
}
bool Button::SetButton (int x,int y,int lenx,int leny,int color1,int color0,const char s[],int Nowcolor)
{
this->x=x;
this->y=y;
this->lenx=lenx;
this->leny=leny;
this->color1=color1;
this->color0=color0;
delete [] this->s;
int lens=strlen(s);
this->s=new char [lens];
for(int i=0;i<=lens;++i)
* (this->s+i)=s[i];
this->Print(1,Nowcolor);
if(lens!=lenx*leny) return 0;
else return 1;
}
bool Button::Check(int Nowcolor)
{
POINT APOINT;
GetCursorPos(&APOINT);
ScreenToClient(GetForegroundWindow(),&APOINT);
APOINT.y=APOINT.y/16;
APOINT.x=APOINT.x/8;
if(APOINT.x>=this->x&&APOINT.x<=this->x+this->lenx-1&&APOINT.y>=this->y&&APOINT.y<=this->y+this->leny-1)
{
if(this->nowpoint)
{
this->Print(0,Nowcolor);
this->nowpoint=0;
}
if((GetAsyncKeyState(VK_RBUTTON) & 0x8000) ? 1:0) return 1;
}
else
{
if(!this->nowpoint)
{
this->Print(1,Nowcolor);
this->nowpoint=1;
}
}
return 0;
}
void Button::Delete()
{
for(int i=0;i<this->leny;++i)
{
COORD pos = {this->x,this->y+i};
SetConsoleCursorPosition(handle,pos);
for(int j=0;j<this->lenx;++j)
{
printf(" ");
}
}
delete [] this->s;
}
int main ()
{
Button a;
a.SetButton(1,10,4,1,7,0x70,"abcd");
while(1)
{
if(a.Check())break;
}
a.Delete();
return 0;
}
c++运行程序 鼠标点击按钮 (c++)(windows)的更多相关文章
- 鼠标点击按钮控制图片移动或者键盘控制图片移动(解决问题:parseInt失效问题,用Number)
在测试用鼠标点击按钮,使图片左右上下移动: 效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> ...
- 如何让Web程序在点击按钮后出现如执行批处理程序般的效果
在cli程序中,输入命令得到连续的输出已经是一种进度而美观的页面交互形式,好比下图: 而web程序里也有类似的场景,比如执行一个耗时任务,除了显示出等待图标外,用户还希望把执行的状态及时显示出来.如下 ...
- 微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法
异常描述: 点击按钮获取用户手机号码,有的时候会出现点击无反应或很久之后才弹出用户授权获取手机号码的弹窗,这种情况下,也会出现点击穿透的问题(详见:微信小程序开发——连续快速点击按钮调用小程序api返 ...
- Delphi第一个入门程序——鼠标点击计数 - imsoft.cnblogs
实现的效果如下: 制作要点: 添加一个按钮Button1和一个标签Label1,并双击按钮进入编程界面在var Form1: TForm1;下面一行加上 n:integer;//定义变量. 然后在 ...
- 微信小程序开发——点击按钮退出小程序的实现
微信小程序官方是没有提供退出的API的,但是在navigator这个组件中,是有退出这个功能的:详情参考官方文档:navigator.示例代码:1 navigator open-type=" ...
- 【QT】第一个QT程序(点击按钮,显示特定文本)
1.基类选 QWidget 2.添加UI Btnshowhello 按钮 labelhello 文本标签 要注意:文本字样和对象名的区别! 对象名和UI部件是一一对应的关系. 修改对象名和修改文本字样 ...
- js控制“鼠标点击按钮后,按钮消失“(可以自己添加video标签控制播放)
- Android中插件开发篇之----动态加载Activity(免安装运行程序)
一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...
- GUI编程笔记(java)08:GUI通过鼠标移动到按钮上更改背景色案例
首先我们看看源代码如下: package cn.itcast_06; import java.awt.Button; import java.awt.Color; import java.awt.Fl ...
随机推荐
- 从零开始的Spring Boot(5、Spring Boot整合Thymeleaf)
Spring Boot整合Thymeleaf 写在前面 从零开始的Spring Boot(4.Spring Boot整合JSP和Freemarker) https://www.cnblogs.com/ ...
- Android学习笔记上下文菜单
布局文件main_activity.xml <?xml version="1.0" encoding="utf-8"?> <RelativeL ...
- 客户端软件GUI开发技术漫谈:原生与跨平台解决方案分析
原生开发应用开发 Microsoft阵营的 Winform WinForm是·Net开发平台中对Windows Form的一种称谓. 如果你想深入的美化UI,需要耗费很大的力气,对于目前主流的CSS样 ...
- 【初学Java学习笔记】AOP与OOP
AOP(Aspect Oriented Programming) 面向切面编程,是属于Spring框架中的内容.AOP相当于OOP的补充,当我们需要对多个对象引入一个公共行为,比如日志,操作记录等,就 ...
- java面试必备知识点-上中下三篇写的很详细
参考博客:写的还是相当的经典 http://www.cnblogs.com/absfree/p/5568849.html 上中下三篇写的很详细 http://blog.csdn.net/riverfl ...
- django drf插件(一)
复习 """ 1.vue如果控制html 在html中设置挂载点.导入vue.js环境.创建Vue对象与挂载点绑定 2.vue是渐进式js框架 3.vue指令 {{ }} ...
- Git的常用命令记录
Git的常用命令记录 1.与远程仓库建立连接,即关联一个远程库 git remote add origin git@server-name:path/repo-name.git; 2.查看当前分支 ...
- 基于Docker Compose的.NET Core微服务持续发布
是不是现在每个团队都需要上K8s才够潮流,不用K8s是不是就落伍了.今天,我就通过这篇文章来回答一下. 一.先给出我的看法和建议 我想说的是,对于很多的微小团队来说,可能都不是一定要上K8s,毕竟上K ...
- Build completed with 1 error and 0 warnings in 20 ms
今天运行Idea,好端端的项目居然报了这个莫名其妙的错误Build completed with 1 error and 0 warnings in 20 ms. 首先排查下代码是否有问题,然后我就建 ...
- 锐捷交换机18010-X端口假死现象
一次上架锐捷交换机,由于ODF光衰不稳定,导致交换机端口down,排查很多发现以下故障: 重置18010-X端口发现提示一下命令: Port in violation! Use 'errdisable ...