简介

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

详解

头文件

<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. 通过数据库客户端界面工具DBeaver连接Hive

    前言 本文讲解如何通过数据库客户端界面工具DBeaver连接hive,并解决驱动下载不下来的问题. 1.为什么使用客户端界面工具 为什么使用客户端界面工具而不用命令行使用hive 通过界面工具查看分析 ...

  2. node-sass问题

    cnpm install node-sass@latest 或者 所以用npm install -g cnpm --registry=https://registry.npm.taobao.org , ...

  3. opencv视频教程分享

    opencv视频教程分享-在线与网盘 https://pan.baidu.com/s/1oAcctlS 密码:i5rd 链接:https://pan.baidu.com/s/1kVJ3iSJ  密码: ...

  4. Java学习笔记6(集合类)

    集合类 集合按照其存储结构可以分为两大类,即单列集合Collection和双列集合Map. Collection:单列集合类的根接口,用于存储一系列符合某种规则的元素,有List和Set两个重要子接口 ...

  5. mysql大表在不停机的情况下增加字段该怎么处理

    MySQL中给一张千万甚至更大量级的表添加字段一直是比较头疼的问题,遇到此情况通常该如果处理?本文通过常见的三种场景进行案例说明. 1. 环境准备 数据库版本: 5.7.25-28(Percona 分 ...

  6. c语音学习笔记

    1.学习教程参考了杨光福 android jni Android视频<JNI> http://edu.csdn.net/course/detail/3235/54186?auto_star ...

  7. jvm基础知识1

    堆放实例对象,栈放实例对象的引用,方法区存储创建类的信息 上面堆和垃圾回收的关系,垃圾回收回收的是堆内存的数据,s0和s1区域, 例如现在我们要清除s0中的堆对象,将s0中正在运行的对象从s0区域移动 ...

  8. day19__生成器,迭代器

    一.列表解析 l1 = ['鸡蛋%s' % i for i in range(10) if i > 5] print(l1) # ['鸡蛋6', '鸡蛋7', '鸡蛋8', '鸡蛋9'] 这种方 ...

  9. POJ 3463 Sightseeing 【最短路与次短路】

    题目 Tour operator Your Personal Holiday organises guided bus trips across the Benelux. Every day the ...

  10. (私人收藏)2019WER积木教育机器人赛(普及赛)基础解决方案

    2019WER积木教育机器人赛(普及赛)基础解决方案 含地图.基础解决方案.全部路线的往返.详细规则.视频.搭建方案 EV3;乐高;机器人比赛;能力风暴;WER https://pan.baidu.c ...