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.rhkb.cn/news/270095.html

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

相关文章

【打工日常】使用docker部署在线Photopea用于linux下替代ps

一、Photopea介绍 linux没有ps适配&#xff0c;对于有时候工作来说确实不方便&#xff0c;我找了很久&#xff0c;才找到了一款功能可以跟ps接近的在线软件&#xff0c;使用docker部署就可以了。它是ps的最佳替代品之一&#xff0c;其界面几乎与ps相同&#xff0c;只不过它是在…

MySQL基础-----SQL语句之DCL数据控制语句

目录 前言 一、管理用户 1.查询用户 2.创建用户 3.修改用户密码 4.删除用户 案例 二、权限控制 1.查询权限 2.授予权限 3.撤销权限 案例 前言 本期我们学习SQL语句的最后一部分内容&#xff0c;也就是数据控制语句DCL。DCL英文全称是Data Control Language(数据控制语…

鱼哥赠书活动第12期:《基于React低代码平台开发》

鱼哥赠书活动第12期&#xff1a;《基于React低代码平台开发》 一、React与低代码平台的结合优势二、基于React的低代码平台开发挑战三、基于React的低代码平台开发实践四、未来展望内容简介&#xff1a;作者简介如何阅读&#xff1a;适合阅读人群&#xff1a;赠书抽奖规则:往期…

DMA 链表模式(LLI)深度解析

在进行一次 DMA 读或者写的时候&#xff0c;可以配置多个链表&#xff0c;从而当一个链表的数据传输完成时&#xff0c;会跳到下一个链表的起始地址&#xff0c;并继续传输数据&#xff0c;直到链表的下一个地址为 0。如果 DMA 使能了完成中断&#xff0c;则当 DMA 发送或者接收…

15 实战:Kaggle房价预测 + 课程竞赛:加州2020年房价预测【李沐动手学深度学习课程笔记】

15 实战&#xff1a;Kaggle房价预测 课程竞赛&#xff1a;加州2020年房价预测【李沐动手学深度学习课程笔记】https://zhuanlan.zhihu.com/p/685343754 写在前面&#xff1a;这里格式很乱&#xff0c;代码直接去知乎copy 1 实战Kaggle比赛&#xff1a;预测房价 1.1 实现几个函…

【源码】imx6ull实现触摸屏单点实验-移植tslib和qt

一、本实验实验的器材&#xff1a; 1.正点原子imx6ull的阿尔法开发板v2.2 2.屏幕ALIENTEK 4.3 RGBLCD 二、实验已经移植好的文件&#xff1a; 仓库代码&#xff1a;https://gitee.com/wangyoujie11/atkboard_-linux_-driver.git 1.文件说明 arm-qt.tar.bz2&#xff1a;移植好的…

基于SSM的农业信息管理系统的设计与实现(有报告)。Javaee项目。ssm项目。

演示视频&#xff1a; 基于SSM的农业信息管理系统的设计与实现&#xff08;有报告&#xff09;。Javaee项目。ssm项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构&#xff0c;…

Mint_21.3 drawing-area和goocanvas的FB笔记(四)

Cairo图形输出 cairo的surface可以是pixbuf, 可以是screen, 可以是png图&#xff0c;也可以是pdf文件 、svg文件、ps文件&#xff0c;定义了surface就可以用cairo_create(surface)产生cairo context, 操作cairo context就可以方便地在surface上画图&#xff0c;如果surface是p…

Linux基本命令

一、基本命令 修改mysql端口号 vim /etc/my.cnf云服务器ssh端口修改 vim /etc/ssh/sshd_config1.1 关机和重启 关机 shutdown -h now 立刻关机 shutdown -h 5 5分钟后关机 poweroff 立刻关机重启 shutdown -r now 立刻重启 shutdown -r 5 5分钟后重启 reboot 立刻重启1.2…

使用mysqld --install命令时出现MSVCR120.dll文件丢失错误

Visual C 2013 and Visual C Redistributable Package https://support.microsoft.com/en-us/help/3179560/update-for-visual-c-2013-and-visual-c-redistributable-package 进去之后先找到自己的版本&#xff0c;x64还是x86&#xff0c;下载 vcredit &#xff0c;进行安装即…

小程序固定头部:CSS实现

效果图 代码逻辑&#xff1a;设置头部的高度&#xff0c;浮动固定后&#xff0c;再加个这个高度的大小的外边距 .weui-navigation-bar {position: fixed;top: 0px;left: 0px;right: 0px;height:90px; } .weui-navigation-bar_bottom{height:90px; }

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

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

【Vue3】Hooks:一种全新的组件逻辑组织方式

&#x1f497;&#x1f497;&#x1f497;欢迎来到我的博客&#xff0c;你将找到有关如何使用技术解决问题的文章&#xff0c;也会找到某个技术的学习路线。无论你是何种职业&#xff0c;我都希望我的博客对你有所帮助。最后不要忘记订阅我的博客以获取最新文章&#xff0c;也欢…

MATLAB环境下基于离散小波变换的体外血管图像处理

下面简要介绍小波变换的部分应用。 信号去噪。小波去噪是根据有效信号和噪声信号在小波变换后表现出的不同特性实现的&#xff0c;一般可用于去除语音、图像、视频等中的噪声信号。小波去噪方法根据对小波系数的非线性处理方式分为三类&#xff0c;分别是小波变换模极大值去噪…

qt QRadioButton 及QButtonGroup 使用

QRadioButton 放在组合框QGroupBox中&#xff0c;再点击时&#xff0c;即使有多个QRadioButton按钮&#xff0c;同时选中的也就只有一个。 如下图所示&#xff0c; 对于多个QRadioButton&#xff0c;每个按钮都写一个槽函数是不太明智的选择&#xff0c;需要将QRadioButton放在…

【LeetCode:2917. 找出数组中的 K-or 值 + 模拟+位运算】

&#x1f680; 算法题 &#x1f680; &#x1f332; 算法刷题专栏 | 面试必备算法 | 面试高频算法 &#x1f340; &#x1f332; 越难的东西,越要努力坚持&#xff0c;因为它具有很高的价值&#xff0c;算法就是这样✨ &#x1f332; 作者简介&#xff1a;硕风和炜&#xff0c;…

excel导出标准化

虽然标题叫标准化&#xff0c;只不过是我自己的习惯&#xff0c;当一件事情变得流程标准化之后&#xff0c;开发程序就会飞快&#xff0c;开发评估工作总是 搞个1~2天&#xff0c;实则前端后端一起开发&#xff0c;1个小时就可以搞定。 1 前端 const exportXls async () >…

Hadoop配置日志的聚集——jobhistory不显示任务问题

问题&#xff1a; 一开始job history是正常的&#xff0c;配置了日志的聚集以后不管做什么任务都不显示任务&#xff0c;hdfs是正常运行&#xff0c;而且根据配置步骤都重启过了。 下面先po出日志聚集的操作步骤&#xff0c;再讲问题 1.配置yarn-site.xml cd $HADOOP_HOME/e…

常见的几种echarts类型

一&#xff1a;折线图 let option {tooltip: {},animation: false,grid: {top: "20%",bottom: "33%", //也可设置left和right设置距离来控制图表的大小left: 5%,right: 5%},xAxis: {boundaryGap:false,data: [1,2,3,4,5],axisLine: {show: true, //隐藏X轴…

工作微信统一管理(还带监管功能)

1.会话页面(可统一管理多个微信号、聚合聊天、手动搜索添加好友、通过验证请求、查看好友的朋友圈等) 2.聊天历史(可查看 所有聊天记录&#xff0c;包括手机.上撤回、删除的消息) 3.群发助手(可以一 -次群发多个好友和群&#xff0c;还可以选择定时发送&#xff0c;目前还在内测…