简介

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

详解

头文件

<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. [每日一题2020.06.10]Codeforces Round #644 (Div. 3) ABCDEFG

    花了5个多少小时总算把div3打通一次( 题目链接 problem A 题意 : 两个x*y的矩形不能重叠摆放, 要放进一个正方形正方形边长最小为多少 先求n = min(2x, 2y, x+y) 再 ...

  2. snprintf和sprintf区别分析

    目录[-] snprintf函数的返回值 snprintf函数的字符串缓冲 今天在项目中使用snprintf时遇到一个比较迷惑的问题,追根溯源了一下,在此对sprintf和snprintf进行一下对比 ...

  3. PHP丨PHP基础知识之流程控制for循环「理论篇」

    今天公司同事在看for循环,那么我们今天就来讲讲for循环吧! for循环是编程语言中一种循环语句,而循环语句由循环体及循环的判定条件两部分组成,其表达式为:for(单次表达式;条件表达式;末尾循环体 ...

  4. Asp.Net 五大对象及作用

    Connection(连接对象):与数据源建立连接. DataAdapter(适配器对象):对数据源执行操作并返回结果,在DataSet与数据源之间建立通信,将数据源中的数据写入DataSet中,或根 ...

  5. 甜咸粽子党大战,Python爬取淘宝上的粽子数据并进行分析

    前言 本文的文字及图片来源于网络,仅供学习.交流使用,不具有任何商业用途,版权归原作者所有,如有问题请及时联系我们以作处理. 爬虫 爬取淘宝数据,本次采用的方法是:Selenium控制Chrome浏览 ...

  6. 向强大的SVG迈进

    作者:凹凸曼 - 暖暖 SVG 即 Scalable Vector Graphics 可缩放矢量图形,使用XML格式定义图形. 一.SVG印象 SVG 的应用十分广泛,得益于 SVG 强大的各种特性. ...

  7. Python初识函数

    Python初识函数 函数理论篇 什么是函数 在编程语言中的函数不同于数学中的函数.不管是数学上的函数还是编程语言中的函数都是为了完成特定的某一功能而诞生的,他们的区别在于: 1.数学中的函数当输入的 ...

  8. python黑帽子之tcp客户端

    在渗透测试过程中,我们经常会需要创建一个tcp客户端来连接服务,发送垃圾数据,进行模糊测试等任务,所以我们来用python创建一个简单的tcp客户端. import sockettarget_host ...

  9. python用pandas遍历csv文件

    import pandas as pd df = pd.read_csv('a.csv') for index, row in df.iterrows(): x, y = row['X'], row[ ...

  10. 平时自己常用的git指令

    增删改查 创建标签 $ git tag -a v1.4 -m 'my version 1.4' 用 -a (译注:取 annotated 的首字母)指定标签名字即可 -m 选项则指定了对应的标签说明 ...