jjzjj

VS2019——easyx新版图形库图形化界面及音频播放的疑难杂症

离子键——2020 2023-05-07 原文

大二的孝高学子


一。mcisendstring()和playsound()

easyx插入音频的时候

当我利用mcisendstring()播放音频信息时候会发现只用通过控制台界面输出才能输出我的音频

信息,当我通过initgraph()在画布中播放的时候就会发现无法播放音频信息,不管我是把文件转换成wav,MP3,还是用绝对路径又或者把文件放在目录下使用相对路径都没有办法,我的问题跟下面这位老哥很相似

(20条消息) 新版easyX图形库在VS2019中mciSendString无法播放音乐-编程语言-CSDN问答

#include<stdio.h>
#include<Windows.h>
#include<graphics.h>//包含图形库头文件
#include<mmsystem.h>//包含多媒体设备接口头文件
#pragma comment(lib,"winmm.lib")
 
void PlayBGM()
{
    mciSendString("open E:/Visual Studio 代码/EasyX practice 1/Saved Pictures/霜雪千年.mp3 alias BGM", 0, 0, 0);//打开音乐,向多媒体设备接口发送一个字符串 ,代表指令
    mciSendString("play BGM wait", 0, 0, 0);//播放音乐
    mciSendString("close BGM", 0, 0, 0);
}
 
int main()
{
 
    initgraph(640, 480, NOCLOSE|NOMINIMIZE);//定义窗口的宽和高
 
    IMAGE img;
 
    loadimage(&img, "E:/Visual Studio 代码/EasyX practice 1/Saved Pictures/42BEA21B730B6C289BA516BD4CA85267.jpg");
    putimage(0, 0, &img);
    PlayBGM();
 
    while (1)
    {
        //使程序处于循环中
    }
 

这是哪位老哥的代码块,

后来我换了个思路利用的是Windowsi下面的API方法,Playsound的函数,发现可以在画布下播放音频

PlaySound("C:\\Users\\Administrator.CH-202202161013\\source\\repos\\eaxyx\\eaxyx\\music.wav", NULL, SND_SYNC);

第一个是文件路径,后面的如果是单纯插入音频的话是就照着写就可以了,就跟mciSendstring

后面的0,0,0是一样的,playsound没有单纯的打开函数(写入即用)

下面是详细解说

在游戏中播放音乐 - CodeBus

二.图形化界面

easyx的图形化界面是非常简单

initgraph(1000, 800);

这个是画布设置黑色的一篇没有颜色如果要单纯的颜色写入的话就要调用setbkcolor(RGB(i, i, i))

(具体颜色选择在这里不累述了)

loadimage(&im, _T("C:\\Users\\Administrator.CH-202202161013\\source\\repos\\eaxyx\\eaxyx\\hongkong.jpg"), 1000, 800);

图片的放入

什么image 呀,_T(){#include <tchar.h> 头文件,Unicode 转多字符集等等,}

,字符问题呀,尺寸大小之类的也不是今天的重点

重点。我在界面切换的时候常常会出现莫名奇妙的黑屏退出的情况

一开始是认为我的界面没有刷新,

按钮状态没有还原,还是属于按下状态,当鼠标在按个按钮时,就会出现冲突

我运行代码的时候,我点完第一个操作结束后,在点第二个就直接熄屏了(弹出的是黑色的控制台窗口)什么字都没有的那种黑色操作框

有的时候是连续操作两个方法可以,在点击第三次操作的时候就熄屏了

而且如果是正常的退出命令的话


是显示的是一个图片然后暂停后才退出
 

 

如图

后来我发现

其实我的每一个case语句之后在break之前我都有一个FlushMouseMsgBuffer()(清除鼠标的缓存信息)
所以我觉得应该不是鼠标操作没有重置的原因,为了说明这一点我单独的吧这个swtich语句放在main里面运行了(什么画布都不要)发现循环的很流畅,我觉得应该是图片加载次数过多的问题(可能跟内存容量有关吧,我也不是太懂)希望有大佬可以更我讲一下原因


于是我单独的写了一个方法体
只加载一次图片然后再循环里面把这个函数调用一次
发现循环边流程了四个操作都可以顺畅的切换
(以前的代码里面是每循环一次都要加载一次图片)

bool putting_picture(MOUSEMSG m) {
	if (button_judge(m.x, m.y)==1|| button_judge(m.x, m.y)==2|| button_judge(m.x, m.y)==3)
	{
		IMAGE im;
		initgraph(1000, 700);
		loadimage(&im, _T("C:\\Users\\Administrator.CH-202202161013\\Desktop\\QQ图片20220302091847.jpg"), 1000, 700);
		putimage(0, 0, &im);
		return true;
	}
	if (button_judge(m.x, m.y) == 4)
	{
		IMAGE im;
		initgraph(1000, 800);
		loadimage(&im, _T("C:\\Users\\Administrator.CH-202202161013\\source\\repos\\eaxyx\\eaxyx\\hongkong.jpg"), 1000, 800);
		putimage(0, 0, &im);
		system("puase");
		Sleep(10000);
		closegraph();
		exit(0);
	}
	else
	{
		return false;
	}
}
bool sign() {

	settextstyle(30, 0, "楷体");
	outtextxy(300, 150, "用户名");
	outtextxy(300, 200, "密码");
	settextstyle(30, 0, "黑体");
	char coco[64];
	TCHAR input[] = _T("请输入ID");
	InputBox(coco, 10, input);
	outtextxy(400, 150, coco);
	char coco2[64];
	TCHAR input2[] = _T("请输入密码");
	InputBox(coco2, 10, input2);
	outtextxy(400, 200, coco2);
	Sleep(600);
	if (strcmp(coco, "1949") == 0 && strcmp(coco2, "snape") == 0) {
		return true;
	}
	else
	{
		HWND SignError = GetHWnd();
		int isok = MessageBox(SignError, "用户名或密码错误!", "提示", MB_OK);
		return false;
	}
}

书山有路勤为径,绝知此事要躬行

(如有错误,务必斧正)
 

有关VS2019——easyx新版图形库图形化界面及音频播放的疑难杂症的更多相关文章

  1. ruby-on-rails - Railstutorial : db:populate vs. 工厂女孩 - 2

    在railstutorial中,作者为什么选择使用这个(代码list10.25):http://ruby.railstutorial.org/chapters/updating-showing-and-deleting-usersnamespace:dbdodesc"Filldatabasewithsampledata"task:populate=>:environmentdoRake::Task['db:reset'].invokeUser.create!(:name=>"ExampleUser",:email=>"example@railstutorial.org",:passwo

  2. 世界前沿3D开发引擎HOOPS全面讲解——集3D数据读取、3D图形渲染、3D数据发布于一体的全新3D应用开发工具 - 2

    无论您是想搭建桌面端、WEB端或者移动端APP应用,HOOPSPlatform组件都可以为您提供弹性的3D集成架构,同时,由工业领域3D技术专家组成的HOOPS技术团队也能为您提供技术支持服务。如果您的客户期望有一种在多个平台(桌面/WEB/APP,而且某些客户端是“瘦”客户端)快速、方便地将数据接入到3D应用系统的解决方案,并且当访问数据时,在各个平台上的性能和用户体验保持一致,HOOPSPlatform将帮助您完成。利用HOOPSPlatform,您可以开发在任何环境下的3D基础应用架构。HOOPSPlatform可以帮您打造3D创新型产品,HOOPSSDK包含的技术有:快速且准确的CAD

  3. arrays - Ruby 数组 += vs 推送 - 2

    我有一个数组数组,想将元素附加到子数组。+=做我想做的,但我想了解为什么push不做。我期望的行为(并与+=一起工作):b=Array.new(3,[])b[0]+=["apple"]b[1]+=["orange"]b[2]+=["frog"]b=>[["苹果"],["橙子"],["Frog"]]通过推送,我将推送的元素附加到每个子数组(为什么?):a=Array.new(3,[])a[0].push("apple")a[1].push("orange")a[2].push("frog")a=>[[“苹果”、“橙子”、“Frog”]、[“苹果”、“橙子”、“Frog”]、[“苹果”、“

  4. Ruby#index 方法 VS 二进制搜索 - 2

    给定一个元素和一个数组,Ruby#index方法返回元素在数组中的位置。我使用二进制搜索实现了我自己的索引方法,期望我的方法会优于内置方法。令我惊讶的是,内置的在实验中的运行速度大约是我的三倍。有Rubyist知道原因吗? 最佳答案 内置#indexisnotabinarysearch,这只是一个简单的迭代搜索。但是,它是用C而不是Ruby实现的,因此自然可以快几个数量级。 关于Ruby#index方法VS二进制搜索,我们在StackOverflow上找到一个类似的问题:

  5. ruby-on-rails - lovdbyless VS 社区引擎……哪个最好? - 2

    随着ruby​​被引入为新的编程救世主,我想知道是否有人基于易用性、运行所需的资源、可用性和易定制性而有偏好。两者有更好的吗? 最佳答案 好吧,任何基于Rails的社交网络应用程序的比较都应该包括insoshi(http://portal.insoshi.com/)。话虽这么说,这三个都非常相似,区别在于实现细节。Lovd和Insoshi都是完整的Rails应用程序;它旨在供您将它们用作入门工具包,并使用您自己的自定义功能对其进行扩展。另一方面,CommunityEngine是一个Rails插件。这意味着您可以更轻松地向现有Rail

  6. ruby - 图形与 Prawn - 2

    寻找一个gem为prawn添加gtraphing功能,我找到了thisone但它似乎有点过时了。有没有更活跃的gem? 最佳答案 直接在Prawn内部绘图没有什么非常活跃的,但是Gruff是一个高度可配置的活跃gem,可以让你制作各种图表。事实上,prawn-graph基本上是gruff的包装器!我的建议是使用gruff生成所需的图表和图形,然后将它们作为图像嵌入到Prawn文档中。所以代码看起来像这样:g=Gruff::Line.new(400)g.title="TransparentBackground"g.theme={:co

  7. 最新版人脸识别小程序 图片识别 生成二维码签到 地图上选点进行位置签到 计算签到距离 课程会议活动打卡日常考勤 上课签到打卡考勤口令签到 - 2

    技术选型1,前端小程序原生MINA框架cssJavaScriptWxml2,管理后台云开发Cms内容管理系统web网页3,数据后台小程序云开发云函数云开发数据库(基于MongoDB)云存储4,人脸识别算法基于百度智能云实现人脸识别一,用户端效果图预览老规矩我们先来看效果图,如果效果图符合你的需求,就继续往下看,如果不符合你的需求,可以跳过。1-1,登录注册页可以看到登录页有注册入口,注册页如下我们的注册,需要管理员审核,审核通过后才可以正常登录使用小程序1-2,个人中心页登录成功以后,我们会进入个人中心页我们在个人中心页可以注册人脸,因为我们做人脸识别签到,需要先注册人脸才可以进行人脸比对,进

  8. ruby - 提前返回 vs if 在 ruby​​ 代码中 - 2

    我看到有两种写作风格:deffind_nest(animal)returnunlessanimal.bird?GPS.find_nest(animal.do_crazy_stuff)end对比deffind_nest(animal)ifanimal.bird?GPS.find_nest(animal.do_crazy_stuff)endend哪个更正确/更可取/遵循最佳实践?还是无所谓? 最佳答案 根据Rubystyleguide,Preferaguardclausewhenyoucanassertinvaliddata.Aguar

  9. ruby-on-rails - Rails 和 I18n : localized templates vs localized string - 2

    您可能知道,从Rails2.2开始,Rails附带了一个简单的本地化和国际化后端。默认情况下,您可以将需要翻译的字符串存储在config文件夹中的本地化文件中。config/locales/en.ymlconfig/locales/it.yml但是Rails也提供了本地化模板和局部的能力。例如,MainController#index操作可以根据模板文件名和当前区域设置选择本地化模板。apps/views/main/index.it.html.erbapps/views/main/index.en.html.erb当您需要翻译单个字符串或短段落时,第一个功能很有用。当同一Action根

  10. centos 安装 最新版 skywalking 8.9.1 - 2

    一、相关网址1、官网(可以下载,查看文章)https://skywalking.apache.org/downloads/2、github地址:(可提问题寻求帮助)https://github.com/apache/skywalking二、 实验环境操作系统 centos7.9先安装好 elasticsearch7.16.2操作系统安装好jdk8-17,实验机器jdk11java下载地址:https://www.oracle.com/java/technologies/downloads/#java8IP地址为192.168.24.160三、安装skywalking 1、下载skywalkin

随机推荐