简介

这是在黑漆漆的程序中,制造用户可点击的按钮,来决定程序下一步该作什么,的基本代码。

详解

头文件

<cstdio><windows.h>

结构体

//这不全别复制
struct Button
{
int x,y,lenx,leny,color1,color0;
char * s;
bool nowpoint;
};

xy是按钮左上角相对于当前窗口的位置(左右是x,上下是y

lenxleny按钮的长与宽(左右是x,上下是y

color1color0是鼠标否或是在按钮上时按钮的颜色

颜色详见 这个

s是输出的一个串

例如lenx=3,leny=3的按钮,是

\[ \begin{matrix}
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)的更多相关文章

  1. 鼠标点击按钮控制图片移动或者键盘控制图片移动(解决问题:parseInt失效问题,用Number)

    在测试用鼠标点击按钮,使图片左右上下移动: 效果如下: 代码如下: <!DOCTYPE html> <html lang="en"> <head> ...

  2. 如何让Web程序在点击按钮后出现如执行批处理程序般的效果

    在cli程序中,输入命令得到连续的输出已经是一种进度而美观的页面交互形式,好比下图: 而web程序里也有类似的场景,比如执行一个耗时任务,除了显示出等待图标外,用户还希望把执行的状态及时显示出来.如下 ...

  3. 微信小程序开发——点击按钮获取用户授权没反应或反应很慢的解决方法

    异常描述: 点击按钮获取用户手机号码,有的时候会出现点击无反应或很久之后才弹出用户授权获取手机号码的弹窗,这种情况下,也会出现点击穿透的问题(详见:微信小程序开发——连续快速点击按钮调用小程序api返 ...

  4. Delphi第一个入门程序——鼠标点击计数 - imsoft.cnblogs

    实现的效果如下: 制作要点: 添加一个按钮Button1和一个标签Label1,并双击按钮进入编程界面在var  Form1: TForm1;下面一行加上  n:integer;//定义变量. 然后在 ...

  5. 微信小程序开发——点击按钮退出小程序的实现

    微信小程序官方是没有提供退出的API的,但是在navigator这个组件中,是有退出这个功能的:详情参考官方文档:navigator.示例代码:1 navigator open-type=" ...

  6. 【QT】第一个QT程序(点击按钮,显示特定文本)

    1.基类选 QWidget 2.添加UI Btnshowhello 按钮 labelhello 文本标签 要注意:文本字样和对象名的区别! 对象名和UI部件是一一对应的关系. 修改对象名和修改文本字样 ...

  7. js控制“鼠标点击按钮后,按钮消失“(可以自己添加video标签控制播放)

  8. Android中插件开发篇之----动态加载Activity(免安装运行程序)

    一.前言 又到周末了,时间过的很快,今天我们来看一下Android中插件开发篇的最后一篇文章的内容:动态加载Activity(免安装运行程序),在上一篇文章中说道了,如何动态加载资源(应用换肤原理解析 ...

  9. GUI编程笔记(java)08:GUI通过鼠标移动到按钮上更改背景色案例

    首先我们看看源代码如下: package cn.itcast_06; import java.awt.Button; import java.awt.Color; import java.awt.Fl ...

随机推荐

  1. yii2.0AR两表联查

    首先,建两个关联表. 表一 -- Table structure for article -- ---------------------------- DROP TABLE IF EXISTS `a ...

  2. C#数据结构与算法系列(九):栈实现综合计算器(中缀表达式)

    1.问题介绍 2.实现思路 3.代码实现 第一个版本(采用这个) public class ArrayStack { private int _maxSize; private int[] _arr; ...

  3. WeChair项目Alpha冲刺(2/10)

    团队项目进行情况 1.昨日进展    Alpha冲刺第二天 昨日进展: 前端完成小程序首页的html+css设计 后端springboot项目搭建完成 详情参见github 数据库也初步建成一些表格, ...

  4. .NET Core Hangfire周期性作业调度问题

    前言 四月中旬Hangfire团队发布了1.7.11版本,在使用周期性作业调度过程中发现一个问题,这个问题应该一直未解决,故做此记录,希望遇到的童鞋根据项目业务而避开这个问题. 周期性作业调度 我们依 ...

  5. 【初学Java学习笔记】AOP与OOP

    AOP(Aspect Oriented Programming) 面向切面编程,是属于Spring框架中的内容.AOP相当于OOP的补充,当我们需要对多个对象引入一个公共行为,比如日志,操作记录等,就 ...

  6. JavaScript图形实例:图形放大镜效果

    1. 基本四瓣花型图案 根据四瓣花卉线的参数方程: t= r*(1+sin(12*θ)/5)*(0.5+sin(4*θ)/2); x=t*cos(θ)); y=t*sin(θ)); 编写如下的HTML ...

  7. 深入理解RocketMQ(一)---阅读源码准备

    本文主要描述使用Idea获取rocketMQ源码及源码的读取. 在演示搭建源码环境前,先简要描述一下RocketMQ的设计目标. 1.架构模式 和大多数消息中间件一样,采用的是发布订阅模式,基本组件包 ...

  8. 洛谷P3694 邦邦的大合唱站队【状压dp】

    状压dp 应用思想,找准状态,多考虑状态和\(f\)答案数组的维数(这个题主要就是找出来状态如何转移) 题目背景 \(BanG Dream!\)里的所有偶像乐队要一起大合唱,不过在排队上出了一些问题. ...

  9. Kubernetes 两步验证 - 使用 Serverless 实现动态准入控制

    作者:CODING - 王炜 1. 背景 如果对 Kubernetes 集群安全特别关注,那么我们可能想要实现这些需求: 如何实现 Kubernetes 集群的两步验证,除了集群凭据,还需要提供一次性 ...

  10. 读取和写入blob类型数据

    读写oracle  blob类型 http://zyw090111.iteye.com/blog/607869 http://blog.csdn.net/jeryjeryjery/article/de ...