EasyX的学习2

消息处理——漂亮的按钮(鼠标)

用到的函数

1.消息结构体变量类型:使用ExMessage

ExMessage msg{ 0 };

定义一个变量名为msg的ExMessage结构体变量并初始化为0

2.获取消息函数:peekmessage函数

//获取消息
peekmessage(&msg, EX_MOUSE);

两个参数 1.代表获取位置,2。代表类型(EX_MOUSE代表鼠标;EX_KEY代表键盘)

3.双缓冲绘图:    BeginBatchDraw()和EndBatchDraw()(所有的绘图代码必须放在begin和end之间)

使用鼠标操作需要在窗口函数initgraph第三个参数加上EX_DBLCLKS

initgraph(640, 480, EX_SHOWCONSOLE || EX_DBLCLKS);

 制作鼠标按钮总代码

#include<stdio.h>
#include<graphics.h>//定义消息结构体变量
ExMessage msg{ 0 };//mx,my是否在指定的矩形区域
bool inarea(int mx, int my, int x, int y, int w, int h)
{if (mx > x && mx<x + w && my>y && my < y + h)return true;return false;
}bool button(int x, int y, int w, int h, const char* text)
{//绘制按钮颜色if (inarea(msg.x, msg.y, x, y, w, h))//鼠标在按钮内的颜色setfillcolor(RGB(93, 107, 153));elsesetfillcolor(RGB(230, 231, 232));//鼠标在按钮外的颜色fillroundrect(x, y, x + w, y + h, 8, 8);//制作圆角矩形//绘制按钮文本int hspace = (w - textwidth(text)) / 2;int vspace = (h - textheight(text)) / 2;outtextxy(x + hspace, y + vspace, text);//判断按钮是否被点击if (msg.message == WM_LBUTTONDOWN && inarea(msg.x, msg.y, x, y, w, h))return true;return false;
}int main()
{//创建一个图形窗口函数 宽度+高度initgraph(640, 480, EX_SHOWCONSOLE || EX_DBLCLKS);//设置窗口的颜色使用:setbkcolorsetbkcolor(RGB(67, 210, 255));//RGB三原色//用设置的背景颜色填充整个窗口cleardevice();//设置背景模式setbkmode(TRANSPARENT);while (true){//获取消息peekmessage(&msg, EX_MOUSE);//双缓冲绘图:所有的绘图代码必须放在begin和end之间BeginBatchDraw();cleardevice();//清屏if (button(20, 20, 150, 35, "start game!")){printf("start game!\n");}if (button(300, 20, 150, 35, "end game!")){printf("end game!\n");}EndBatchDraw();//把消息类型设置为0msg.message = 0;}//防止程序退出Sleep(100000);return 0;
}

鼠标在按钮外的样子

 鼠标在按钮内的样子

 可以设置鼠标左右键执行不同的操作

	while (true){//获取消息if (peekmessage(&msg, EX_MOUSE))//bool类型{switch (msg.message){case WM_LBUTTONDOWN:	//左键按下printf("鼠标左键按下\n");break;case WM_RBUTTONDOWN:	//右键按下printf("右键按下 pos(%d,%d)\n", msg.x, msg.y);//输出鼠标点击的坐标break;case WM_MBUTTONDOWN:	//中键按下printf("中键按下\n");break;case WM_MOUSEWHEEL:     //滚轮滚动printf("滚轮滚动 dir(%d)\n", msg.wheel);//屏幕方向为正120break;case WM_LBUTTONDBLCLK:	//左键双击printf("左键双击\n");break;case WM_MOUSEMOVE:		//鼠标移动//printf("鼠标移动\n");break;}}}

msg.message是结构体内的一个成员

消息处理——按键消息

#include<stdio.h>
#include<graphics.h>//定义消息结构体变量
ExMessage msg{ 0 };int main()
{//创建一个图形窗口函数 宽度+高度initgraph(640, 480, EX_DBLCLKS);//设置窗口的颜色使用:setbkcolorsetbkcolor(RGB(67, 210, 255));//RGB三原色//用设置的背景颜色填充整个窗口cleardevice();//定义小球属性int x = 50, y = 50, r = 24;int speed = 4;//小球移动速度int vx = 0;//小球变化方向int vy = 0;//小球变化方向while (true){//获取消息peekmessage(&msg, EX_KEY);//判断按键消息if (msg.message == WM_KEYDOWN){//具体判断是哪个键按下switch (msg.vkcode){case VK_UP:		//上键按下vy = -1;break;case VK_DOWN:	//下键按下vy = 1;break;case VK_LEFT:	//左键按下vx = -1;break;case VK_RIGHT:	//右键按下vx = 1;break;case VK_SPACE:	//空格break;case 'A':	//字母键必须大写字符break;}}else if (msg.message == WM_KEYUP){switch (msg.vkcode){case VK_UP:		//上键按下vy = 0;break;case VK_DOWN:	//下键按下vy = 0;break;case VK_LEFT:	//左键按下vx = 0;break;case VK_RIGHT:	//右键按下vx = 0;break;}}//双缓冲绘图:所有的绘图代码必须放在begin和end之间BeginBatchDraw();cleardevice();//清屏//绘制小球setfillcolor(RGB(255, 278, 255));solidcircle(x, y, r);//更新小球的位置x += speed * vx;y += speed * vy;EndBatchDraw();Sleep(10);//防止小球移动太快//把消息类型设置为0msg.message = 0;}//防止程序退出Sleep(100000);return 0;
}

上面代码可以根据键盘上下左右移动一个小球

 

 根据键盘上下左右移动小球,也可以修改小球的移动速度

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/724073.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【Linux】基本指令(中)

&#x1f984;个人主页:修修修也 &#x1f38f;所属专栏:Linux ⚙️操作环境:Xshell (操作系统:CentOS 7.9 64位) 目录 man指令 cp指令 mv指令 cat指令 more指令 less指令 head指令 …

如何对酒店开展科学的定岗定编——以酒店健身房、娱乐房为例

近年来&#xff0c;随着旅游行业的快速发展&#xff0c;也带动了酒店业的兴盛。酒店的经营效益不仅受益于旅游业&#xff0c;同时也受制于旅游行业。由于旅游业存在明显的季节性差异&#xff0c;旅游旺季客流量多、淡季客流量少&#xff0c;造成人员忙闲不均的问题。酒店行业也…

gofly接口入参验证使用介绍

接口传入的参数做相关性质验证是开发中较为常用&#xff0c;gofly框架内置校验工具&#xff0c;提供开发效率&#xff0c;开发接口简单调用即可实现验证&#xff0c;下面介绍gofly框架数据验证设计思路及使用方法。 gofly框架提供了功能强大、使用便捷、灵活易扩展的数据/表单…

闰年导致的哪些 Bug

每次闰年对程序员们都是一个挑战&#xff0c;平时运行好好的系统&#xff0c;在 02-29 这一天&#xff0c;好像就会有各种毛病。 虽然&#xff0c;提前一天&#xff0c;领导们都会提前给下面打招呼。但是&#xff0c;不可避免的&#xff0c;今天公司因为闰年还是有一些小故障。…

Linux conntrack和iptables技术解析

Linux虚拟文件系统管理技术 1. netfilter解析1.1 netfilter的基础原理1.2 netfilter的相关hook 2. conntrack解析2.1 conntrack的基础原理2.2 conntrack的表记录解析 3. iptables解析3.1 iptables基础原理3.2 融合conntrack表的iptables规则 4. 疑问和思考4.1 conntrack和iptab…

医学知识和医疗应用开发交叉领域中垂类大语言模型应用相关研究

前言&#xff1a; 基于公司对LLM落地的期望&#xff0c;此proposal尚未研究完毕&#xff0c;只是简单做了一些消息整合和建议。 关于知识细节详见末尾Refs 背景&#xff1a; 随着LLM&#xff08;大语言模型&#xff09;的爆火&#xff0c;不少企业都在寻找通过LLM解决企业业…

【学习笔记】java项目:黑马头条(day01)

文章目录 环境搭建、SpringCloud微服务(注册发现、服务调用、网关)1)课程对比2)项目概述2.1)能让你收获什么2.2)项目课程大纲2.3)项目概述2.4)项目术语2.5)业务说明 3)技术栈4)nacos环境搭建4.1)虚拟机镜像准备4.2)nacos安装 5)初始工程搭建5.1)环境准备5.2)主体结构 6)登录6.1…

Linux网络隧道协议IPIP认知(基于Linux network namespace 的 IPIP 隧道通信)

写在前面 博文内容为 Linux 隧道通信 IPIP认知内容涉及&#xff1a;ipip 介绍&#xff0c;一个 ipip 通信 Demo 以及数据帧流转分析理解不足小伙伴帮忙指正 某些人和事&#xff0c;哪怕没有缘分&#xff0c;是路边的风景&#xff0c;可是只要看一眼&#xff0c;依然会让人觉得…

高转化利器】Xinstall实现H5唤醒App,打开指定页面,轻松满足营销需求!

在移动互联网时代&#xff0c;App的拉新促活对于企业的发展至关重要。为了提升用户体验和转化率&#xff0c;Xinstall推出了一项强大的功能——H5唤醒App。通过这一功能&#xff0c;用户可以直接从Web页面拉起App&#xff0c;并在拉起过程中通过传参打开指定页面&#xff0c;满…

QT在scrollArea中添加按钮,可滚动

添加按钮可滚动&#xff0c;同时设置按钮大小&#xff0c;代码如下 ui->setupUi(this); //在UI里面已经拖了一个scrollAreamyWidget new QWidget(this); //新建一个QWidget放在scrollArea中QVBoxLayout *layout new QVBoxLayout(…

手工将一个 llvm IR 汇编代码解析成为 bitcode 文件

1&#xff0c;原始c语言文件 sum.c int sum(int a, int b) {return ab; } 2&#xff0c;编译成为 LLVM-IR 汇编语言 clang sum.c -emit-llvm -S -c -o sum.ll 3&#xff0c;手工把 llvm IR 汇编语言解析成 bitcode 3.1&#xff0c;源码 gen_llvm_ir.cpp #include <ll…

Sora:AI视频模型的无限可能与挑战

随着人工智能技术的突飞猛进&#xff0c;AI视频模型已成为科技领域的新焦点。OpenAI推出的AI视频模型Sora&#xff0c;凭借其卓越的技术性能和前瞻性&#xff0c;为AI视频领域的发展揭开了新的篇章。本文将从技术解析、应用场景、未来展望、伦理与创意以及用户体验与互动五个方…

Xilinx高级调试方法--远程调试

Xilinx高级调试方法--远程调试 1 虚拟电缆调试2 FPGA设计2.1 扩展配置接口 3 PCIe-XVC驱动3.1 PCIe-XVC驱动3.2 XVC-Server 4 Vivado Design Suite4.1 同一台主机4.2 不同主机 本文主要介绍Xilinx的一些高级调试方法&#xff0c;以及如何使用Xilinx的相关IP。 1 虚拟电缆调试 …

数据结构(二)——线性表

二、线性表 2.1线性表的定义和基本操作 2.1.1 线性表的基本概念 线性表&#xff1a;是具有相同数据类型的 n 个数据元素的有限序列。(Eg:所有的整数按递增次序排列&#xff0c;不是顺序表&#xff0c;因为所有的整数是无限的)其中n为表长&#xff0c;当n0时线性表是一个空表…

AI领域再出“王炸“----Claude3是否会成为下一个“神“

目录 一.Claude3最新发布 二.Claude3支持20万token 三.Claude3在未公开算法上取得重大突破 1.Claude 3读懂博士论文 2.量子跃迁集成&#xff1a; Claude 3智商&#xff1a;101 测试方法 测试细节 通过Karpathy挑战 Claude 3自画像&#xff0c;突破本我 从洛杉矶排到…

UR机器人装箱姿态

1.官网手册上并没有给出该打包位姿 2.一般厂家发回来的机器人都会有这个打包程序 可以运行这个程序&#xff0c;如果有的话。 3.打包点位 如果没有这个这个&#xff0c;也可以直接按下面点位来&#xff0c;都是差不多的点位&#xff0c;可以放到包装箱中的 这个是UR10的 这个…

Vulnhub靶机:Billu_b0x

一、介绍 运行环境&#xff1a;Virtualbox 攻击机&#xff1a;kali&#xff08;192.168.56.101&#xff09; 靶机&#xff1a;Billu_b0x&#xff08;192.168.56.107&#xff09; 目标&#xff1a;获取靶机root权限和flag 靶机下载地址&#xff1a;https://download.vulnhu…

智慧城市中的数据力量:大数据与AI的应用

目录 一、引言 二、大数据与AI技术的融合 三、大数据与AI在智慧城市中的应用 1、智慧交通 2、智慧环保 3、智慧公共安全 4、智慧公共服务 四、大数据与AI在智慧城市中的价值 1、提高城市管理的效率和水平 2、优化城市资源的配置和利用 3、提升市民的生活质量和幸福感…

Vue+腾讯地图-实现关键词输入提示功能

不废话&#xff0c;上代码~~~ 效果图&#xff1a; 1、先去腾讯地图后台创建自己的应用获取到应用的 Key 腾讯地图后台地址&#xff1a;腾讯位置服务 - 立足生态&#xff0c;连接未来 创建应用的 Key 如下&#xff1a; 2、在项目中添加腾讯地图API的js插件&#xff0c;如…

CCF-A推荐会议 安全界顶会ACM CCS‘24 4月29日第二轮投稿!共建更安全的数字世界!

会议之眼 快讯 第31届ACM CCS (ACM Conference on Computer and Communications Security)即计算机和通信安全会议将于 2024 年 10月14日-18日在美国盐湖城举行&#xff01;CCS是美国计算机协会(ACM)安全、审计与控制特别兴趣小组(SIGSAC)主办的一年一度的重要会议。是SIGSAC的…