Easyx趣味编程7,鼠标消息读取及音频播放

在这里插入图片描述

hello大家好,这里是dark flame master,今天给大家带来Easyx图形库最后一节功能实现的介绍,前边介绍了绘制各种图形及键盘交互,文字,图片等操作,今天就可以使写出的程序更加生动且容易操控。一起学习吧!
由于会用到前边的内容
专栏:Easyx趣味编程

正题:
EasyX提供了记录并判断玩家使用鼠标对窗体进行的操作,这些操作会放在操作列表中,等待被处理。

getmassage函数

getmassage函数是从消息列表中获取一个消息,并将该消息移除,程序会根据这条消息进行相关的响应。
在这里插入图片描述
这个函数有两次重载,但是功能相同
在这里插入图片描述
若getmessage()函数传入参数是-1,表示获取所有类型的消息。

如果不需要读取所有类型的消息,可以单独写某一种,或者利用|(或)运算符进行合并。

创建一个ExMessage变量
如果我们鼠标消息和键盘消息都想要,其他两种可以不读取

ExMessage msg;
msg = getmessage(EX_MOUSE | EX_CHAR);

ExMessage结构体如下
在这里插入图片描述
消息标识:传入的参数为鼠标消息就使用鼠标的结构体,传入参数是什么,就调用哪个结构体。
消息标识:
在这里插入图片描述
我们这节课只讲鼠标消息类型,所以只举例说明鼠标消息标识
 对照上表,实现鼠标移动时绘制一个半径为2的黑色的填充圆,左键按下绘制半径为20的蓝色填充圆,右键按下绘制黄色半径为50的填充五角星。
代码如下:

#include <stdio.h>
#include <easyx.h>
#include <stdlib.h>
#include <math.h>
#define Pai 3.14
int main()
{initgraph(800, 600);setbkcolor(WHITE);cleardevice();ExMessage msg;while (1){msg = getmessage(EX_MOUSE);switch(msg.message){case WM_MOUSEMOVE://在移动过程中setfillcolor(BLACK);solidcircle(msg.x, msg.y, 2);break;case WM_LBUTTONDOWN://在移动过程中setfillcolor(BLUE);solidcircle(msg.x, msg.y, 20);break;case WM_RBUTTONDOWN:setfillcolor(GREEN);int r = 50;//半径//初始角度double theta = Pai / 2;//递增角度double delta = 2 * Pai / 5;POINT points[5];//定义一个数组,存放点的坐标for (int i = 0; i < 5; i++){points[i].x = cos(theta + i * delta * 2) * r+msg.x;points[i].y = sin(theta + i * delta * 2) * r+msg.y;}setfillcolor(YELLOW);setpolyfillmode(WINDING);solidpolygon(points, 5);break;}}return 0;
}

运行后如图
在这里插入图片描述
 之前的操作都默认为单击事件,不论我们点击的有多快,都还是会判定为单击事件。
在创建窗体时,加上EX_DBLCLKS即可识别双击事件。

	initgraph(800, 600, EX_DBLCLKS);

要注意:EX_DBCLICKS这个版本已经不能在VS上使用了。
更改代码,双击出现五角星,左击蓝色圆,右击红色圆,左边双击黄色五角星。

	while (1){msg = getmessage(EX_MOUSE);switch(msg.message){case WM_MOUSEMOVE://在移动过程中setfillcolor(BLACK);solidcircle(msg.x, msg.y, 5);break;case WM_LBUTTONDOWN://在移动过程中setfillcolor(BLUE);solidcircle(msg.x, msg.y, 20);break;case WM_RBUTTONDOWN://在移动过程中setfillcolor(RED);solidcircle(msg.x, msg.y, 20);break;case WM_LBUTTONDBLCLK:setfillcolor(GREEN);int r = 50;//半径//初始角度double theta = Pai / 2;//递增角度double delta = 2 * Pai / 5;POINT points[5];//定义一个数组,存放点的坐标for (int i = 0; i < 5; i++){points[i].x = cos(theta + i * delta * 2) * r+msg.x;points[i].y = sin(theta + i * delta * 2) * r+msg.y;}setfillcolor(YELLOW);setpolyfillmode(WINDING);solidpolygon(points, 5);break;}}

运行后如图
在这里插入图片描述
音频播放
 v趣味化编程,只有画面可不行,我们要声色俱全,如果我们玩一个小游戏,一定会有相应的背景音乐。
认识一个新函数mciSendString

MCIERROR mciSendString(LPCTSTR lpszCommand,//命令字符串,如open,close,LPTSTR lpszReturnString,//接收返回信息的字符串,一般直接填NULLUINT cchReturn,//返回信息的长度,可以直接填零HANDLE hwndCallback,//回调窗口句柄,一般直接填NULL
);

在播放之前要将播放的歌曲放置在工程目录下。
在这里插入图片描述
当我们在使用时却会报错
在这里插入图片描述
这是因为这个函数在库winmm.lib中,默认情况下链接器不会输入这个库文件。
添加库winmm.lib
在这里插入图片描述
点击添加即可
在这里插入图片描述
在这里插入图片描述
将库添加即可
在这里插入图片描述
我们这里用到了汉语,所以要将字符集设置为未设置
在这里插入图片描述
代码如下

int main()
{mciSendString("open 及你太美.mp3", NULL, 0, NULL);//打开音乐,没有进行播放printf("打开音乐");getchar();mciSendString("play 及你太美.mp3", NULL, 0, NULL);//播放printf("播放音乐");getchar();mciSendString("pause 及你太美.mp3", NULL, 0, NULL);//暂停播放printf("暂停");getchar();mciSendString("resume 及你太美.mp3", NULL, 0, NULL);//继续播放printf("继续");getchar();mciSendString("stop 及你太美.mp3", NULL, 0, NULL);//停止播放printf("停止");getchar();mciSendString("close 及你太美.mp3", NULL, 0, NULL);//关闭音乐printf("关闭");getchar();return 0;
}

现在就可以实现一个坤坤播放器
创建窗体,将所用到的材料都放在工程目录里。
绘制坤坤.png作为背景
在这里插入图片描述
大概找出篮球的区域就可以编写程序了。
代码如下

int main()
{int key = 1;initgraph(600,600, EX_DBLCLKS);IMAGE img;//创建窗体loadimage(&img, "坤坤.png", 600, 600);putimage(0, 0, &img);mciSendString("open 及你太美.mp3", NULL, 0, NULL);//打开音乐,没有进行播放//如果我们点击篮球,就会播放歌曲ExMessage msg;while (key){msg = getmessage(EX_MOUSE);switch(msg.message){				case WM_LBUTTONDOWN://左击if (msg.x > 0 && msg.x < 600 && msg.y>450 && msg.y < 600){mciSendString("play 及你太美.mp3", NULL, 0, NULL);//播放}break;case WM_RBUTTONDOWN://右击if (msg.x > 0 && msg.x < 600 && msg.y>450 && msg.y < 600){mciSendString("pause 及你太美.mp3", NULL, 0, NULL);//暂停}break;case WM_LBUTTONDBLCLK://右键双击关闭音乐mciSendString("close 及你太美.mp3", NULL, 0, NULL);//关闭音乐key = 0;break;}}closegraph();return 0;
}

运行后点击左键播放,点击右键暂停,双击右键就关闭音乐结束程序。
这个小程序虽然很短,但已经运用了今天的大部分所学,希望大家能够理解。
本文结束啦,下文见!

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

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

相关文章

算法通过村第十五关-超大规模|黄金笔记|超大规模场景

文章目录 前言对20GB文件进行排序超大文本中搜索两个单词的最短距离从10亿数字中寻找小于100万个数字总结 前言 提示&#xff1a;你生命的前半辈子或许属于别人&#xff0c;活在别人的认为里。那把后半辈子还给自己&#xff0c;去追随你内在的声音。 --荣格 理解了前面的几个题…

Openssl数据安全传输平台006:粘包的处理-代码框架及实现-TcpSocket.cpp

文章目录 0. 代码仓库1. TCP通信粘包问题2. 粘包、拆包表现形式2.1 正常情况2.2 两个包合并成一个包2.3 出现了拆包 3. 粘包的处理-参考仓库中的文件TcpSocket.cpp3.1 发送数据时候的处理3.2 接收数据时候的处理 0. 代码仓库 https://github.com/Chufeng-Jiang/OpenSSL_Secure_…

Node学习笔记之Express框架

一、express 介绍 express 是一个基于 Node.js 平台的极简、灵活的 WEB 应用开发框架&#xff0c;官方网址&#xff1a;https://www.expressjs. com.cn/ 简单来说&#xff0c;express 是一个封装好的工具包&#xff0c;封装了很多功能&#xff0c;便于我们开发 WEB 应用&…

局域网下多台windows电脑时间同步

windows时间同步 最近在项目中遇见了多台windows电脑的时间同步问题。在这个项目中&#xff0c;有五台电脑&#xff0c;五台电脑处于同一局域网下&#xff0c;其中有一台可以连接互联网&#xff08;A电脑&#xff09;。我需要将其他四台电脑&#xff08;B、C、D、E电脑&#xf…

图论03-【无权无向】-图的深度优先DFS遍历-路径问题/检测环/二分图

文章目录 1. 代码仓库2. 单源路径2.1 思路2.2 主要代码 3. 所有点对路径3.1 思路3.2 主要代码 4. 路径问题的优化-提前结束递归4.1 思路4.2 主要代码 5. 检测环5.1 思路5.2 主要代码 6. 二分图6.1 思路6.2 主要代码6.2.1 遍历每个联通分量6.2.2 递归判断相邻两点的颜色是否一致…

Jenkins 相关内容

Jenkins 相关内容 什么是 Jenkins&#xff0c;它是如何工作的&#xff1f;Jenkins 中自由式项目和管道之间的区别什么是Jenkins管道&#xff0c;它们如何工作&#xff1f;第一次如何安装Jenkins并进行设置&#xff1f;什么是 Jenkins 插件&#xff0c;如何安装它们&#xff1f;…

无论有没有按钮,iPhone都可以进行截屏操作!如何在iPhone上截屏

通过简单的按键组合&#xff0c;可以很容易地将iPhone屏幕的图片捕获到图像文件中&#xff0c;并保存到照片库中。以下是操作方法。 什么是屏幕截图 屏幕截图是指通常包含你在设备屏幕上看到的内容的精确副本的图像。在设备内拍摄的数字屏幕截图通常使用相机拍摄物理屏幕的照…

AD9371 官方例程HDL详解之JESD204B TX_CLK生成 (二)

AD9371 系列快速入口 AD9371ZCU102 移植到 ZCU106 &#xff1a; AD9371 官方例程构建及单音信号收发 ad9371_tx_jesd -->util_ad9371_xcvr接口映射&#xff1a; AD9371 官方例程之 tx_jesd 与 xcvr接口映射 AD9371 官方例程 时钟间的关系与生成 &#xff1a; AD9371 官方…

HTTPS、SSL/TLS,HTTPS运行过程,RSA加密算法,AES加密算法

1、为什么网站要使用安全证书 我们所处的网络环境是复杂多样的&#xff0c;大致分为两类&#xff0c;一类是可信的网络服务商&#xff0c;比如直接连的电信运营商的网络&#xff0c;网线&#xff0c;4G&#xff0c;5G&#xff1b;另一类是不可信的网络&#xff0c;比如WIFI&am…

Linux笔记之diff工具软件P4merge的使用

Linux笔记之diff工具软件P4merge的使用 code review! 文章目录 Linux笔记之diff工具软件P4merge的使用1.安装和配置2.使用&#xff1a;p4merge a.cc b.cc3.配置git 参考博文: Ubuntu Git可视化比较工具 P4Merge 的安装/配置及使用 1.安装和配置 $ wget https://cdist2.per…

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码

仿CSGO盲盒开箱源码 盲盒商城源码 盲盒开箱源码 潮物盲盒商城源码 测试环境&#xff1a;宝塔、Linux、PHP7.2、MySQL5.6 根目录 public&#xff0c;伪静态 thinkphp&#xff0c;php需要Redis扩展 后台&#xff1a;/stf 账号&#xff1a;admin 密码&#xff1a;123123 *后台…

数据结构: map与set的简单实现

目录 map与set的模拟实现 1.基本框架 2.模拟实现map与set所需要做的事 1.使用模板 , 达到泛性编程 2.比较问题 3.迭代器 RBTree中: operator operator-- 4.map [ ] 的实现 5.使用普通迭代器构造const迭代器 效果 map与set的模拟实现 1.基本框架 map set 2.模拟实…

【iOS】MVC模式

MVC&#xff08;Model-View-Controller&#xff0c;模型-视图-控制器&#xff09;模式是相当古老的设计模式之一&#xff0c;ta最早出现在SmallTalk语言中。现在&#xff0c;很多计算机语言和架构都采用了MVC模式。 MVC模式概述 MVC模式是一种设计模式&#xff0c;由3部分组成…

【Spring Cloud】如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本

文章目录 1. 版本选择2. 用脚手架快速生成微服务的pom.xml3. 创建一个父工程4. 代码地址 本文描述如何确定微服务项目的Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本。 1. 版本选择 我们知道Spring Boot、Spring Cloud、Spring Cloud Alibaba的版本选择一致性非常重…

【ML】cheatsheet

LR 原理与面试题目DT, Adaboost, GBDT, xgboost 原理 细节 与 例子 https://www.cnblogs.com/createMoMo/p/12635709.html xgboost挺详细的算法原理与例子 https://zhuanlan.zhihu.com/p/660468945 着重lightgbm就xgboost的改善方向 https://zhuanlan.zhihu.com/p/366952043机器…

《计算机视觉中的多视图几何》笔记(14)

14 Affine Epipolar Geometry 本章主要是在仿射摄像机的情况下重新考虑对极几何&#xff0c;也就是仿射对极几何。 仿射摄像机的优点是它是线性的&#xff0c;所以很多最优化算法可以用线性代数的知识解决。如果是一般的投影摄像机&#xff0c;很多算法就不是线性的了&#x…

IDEA 新版本设置菜单展开

使用了新版本的IDEA 新UI后&#xff0c;常用的file&#xff0c;view&#xff0c;菜单看不见了&#xff0c;不太适应&#xff0c;找了一下&#xff0c;有个配置可以修改。 打开settings里面把show main menu in a separate toolbar勾选上&#xff0c;应用保存就可以了

CSS3属性详解(一)文本 盒模型中的 box-ssize 属性 处理兼容性问题:私有前缀 边框 背景属性 渐变 前端开发入门笔记(七)

CSS3是用于为HTML文档添加样式和布局的最新版本的层叠样式表&#xff08;Cascading Style Sheets&#xff09;。下面是一些常用的CSS3属性及其详细解释&#xff1a; border-radius&#xff1a;设置元素的边框圆角的半径。可以使用四个值设置四个不同的圆角半径&#xff0c;也可…

flink中使用GenericWriteAheadSink的优缺点

背景 GenericWriteAheadSink是flink中提供的实现几乎精确一次输出的数据汇抽象类&#xff0c;本文就来看一下使用GenericWriteAheadSink的优缺点 GenericWriteAheadSink的优缺点 先看一下GenericWriteAheadSink的原理图 优点&#xff1a; 几乎可以精确一次的输出&#xf…

在Word中,图片显示不全

在今天交作业的时候&#xff0c;发现了一个非常SB的事情&#xff0c;把图片复制过去显示不完全&#xff1a; 使用文心一言查看搜索了一下&#xff0c;发现可能是以下几种原因&#xff1a; 图片所在行的行高设置不正确。可以重新设置行高&#xff0c;具体步骤包括打开图片显示…