版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
...v.自己动手开发音乐播放器?五?播放功能的实现
小伙伴们注意了,我在上一篇博客介绍了文件操作,在这篇博客中将承受音乐播放器的核心功能,播放、暂停、停顿、继续、上一曲、下一曲等功能,在这些功能中会用到一个非常重要的函数mmciSendString,mciSendString函数是一个处理多媒体文件的函数,其中音乐播放器中的播放、暂停、停顿、等功能都需要用到这个函数,居然这个函数这么重要,我们就来看看这个函数的用法,
函数原型:
MCIERRORmciSendString(
LPCTSTRlpszmand,命令字符串
LPTSTRlpszReturnString,返回的字符串
UINTcchReturn,返回字符串的大小
HANDLEhwndCallback回调句柄(一般为NULL)
);
其中的第一个参数的格式:
播放命令+音乐文件
如:mciSendString("playD:\\1.mp3",NULL,0,NULL);
中play表示播放命令D:\\1.mp3表示音乐文件
在写代码前先定义一些全局变量和函数
全局变量
/**************************************************************************
播放歌曲所需的全局变量
****************************************************************************/
staticintnumPlayMusiow=0;//正在播放的歌曲的序号
PlayMusic函数用于播放音乐
/****************************************************************************
函数名:voidPlayMusic(HWNDhwnd)
函数功能:播放歌曲
****************************************************************************/
voidPlayMusic(HWNDhwnd)
{
TCHARcmd[MAX_PATH];//保存播放歌曲的命令
//打印关闭歌曲的命令
wsprintf(cmd,"close%s",OpenMusicFile);
///发送关闭歌曲的命令
mciSendString(cmd,"",0,NULL);
GetMusic(hwnd);//得到选择的歌曲
//显示正在播放的歌曲
SetDlgItemText(hwnd,IDC_PLAYEDIT,line);
wsprintf(cmd,"open%salias",OpenMusicFile);
mciSendString(cmd,0,0,NULL);
//打印播放歌曲的命令
wsprintf(cmd,"play%s",OpenMusicFile);
//发送播放歌曲的命令
mciSendString(cmd,0,0,NULL);
}
然后在voidMain_Onmand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)中添加下面的代码
//播放歌曲
caseIDC_PLAY:
{
PlayMusic(hwnd);
}
break;
运行结果(播放成龙的少年强)
暂停的实现代码暂停和播放类似也是定义一些全局变量和函数
首先定义一个全局变量
/***********************************************************************************************
实现暂停播放所需的全局变量
*************************************************************************************************/
staticintflagPauseOrPlay=0;//暂停播放的标志位(歌曲是暂停还是播放)
然后定义一个函数PauseMusic实现暂停播放
/**********************************************************************************************
函数名:voidPauseMusic(HWNDhwnd)
函数功能:暂停歌曲
***********************************************************************************************/
voidPauseMusic(HWNDhwnd)
{
//得到暂停按钮上的句柄
HWNDhwndPause=GetDlgItem(hwnd,IDC_PAUSE);
TCHARcmd[256];
//当按下了继续按钮
if(1==flagPauseOrPlay)
{
//继续按钮变成暂停按钮
SetWindowText(hwndPause,TEXT("暂停"));
//打印播放命令
wsprintf(cmd,"play%s",OpenMusicFile);
//发送播放命令
mciSendString(cmd,NULL,0,0);
//修改标志位(表示用户按下了继续按钮)
flagPauseOrPlay=0;
}
elseif(0==flagPauseOrPlay)//当按了暂停后
{
//暂停按钮变成继续按钮
SetWindowText(hwndPause,TEXT("继续"));
//打印暂停命令
wsprintf(cmd,"pause%s",OpenMusicFile);
//执行暂停命令
mciSendString(cmd,NULL,0,0);
//修改标志位(表示用户按下了暂停按钮)
flagPauseOrPlay=1;
}
}
最后在voidMain_Onmand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)中添加下面的代码
//暂停
caseIDC_PAUSE:
{
PauseMusic(hwnd);
}
break;
实现效果
停顿播放的实现
/***********************************************************************************************
函数名:voidStopMusic(HWNDhwnd)
函数功能:停顿播放
************************************************************************************************/
voidStopMusic(HWNDhwnd)
{
TCHARcmd[256];
wsprintf(cmd,"stop%s",OpenMusicFile);
mciSendString(cmd,NULL,0,0);
}
在voidMain_Onmand(HWNDhwnd,intid,HWNDhwndCtl,UINTcodeNotify)中添加下面的代码
//停顿
caseIDC_STOP:
{
StopMusic(hwnd);
}
break;
上一曲或下一曲的实现
全局变量
/****************************************************************************************************************
实现上一曲和下一曲所需的全局变量
*****************************************************************************************************************/
staticinttotalMusicCount;//播放列表中歌曲的总数
staticNumPlayMusiow;//选择歌曲的编号
staticintiLoopType=0;//播放方式:初始为单曲模式
函数
/***********************************************************************************************
函数名:voidJumpMusic(HWNDhwnd,intnum)
函数功能:实现上一曲(num=0)或下一曲(num=1)
************************************************************************************************/
voidJumpMusic(HWNDhwnd,intnum)
{
HWNDhwndList=GetDlgItem(hwnd,IDC_LIST1);
//得到选择的歌曲的序号
numPlayMusiow=ListBox_GetCurSel(hwndList);
//得到歌曲总数
totalMusicCount=ListBox_GetCount(hwndList);
/*下面的代码是处理随机播放中的上一曲和下一曲*/
if(0==num)//上一曲
{
//随机播放
if(3==iLoopType)
{
//随机生成歌曲的序号
numPlayMusiow=rand()%totalMusicCount;
}
else
{
//当正在播放的歌曲的序号大于0时
if(numPlayMusiow>0)
{
//上一曲
numPlayMusiow=numPlayMusiow-1;
}
elseif(0==numPlayMusiow)//当在播放第1首歌时
{
//跳到最后一首歌曲
numPlayMusiow=totalMusicCount-1;
}
}
}
elseif(1==num)//下一曲
{
if(3==iLoopType)
{
//随机生成歌曲的序号
numPlayMusiow=rand()%totalMusicCount;
}
else
{
//当正在播放的歌曲的序号小于歌曲的最大序号时
if(numPlayMusiow<totalMusicCount-1)
{
//下一曲
numPlayMusiow=numPlayMusiow+1;
}
//当正在播放最后一首歌时
elseif(numPlayMusiow==totalMusicCount-1)
{
//跳到第一首歌
numPlayMusiow=0;
}
}
}
//设置歌曲的序号
ListBox_SetCurSel(hwndList,numPlayMusiow);
//得到歌曲的序号
numPlayMusiow=ListBox
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年心理学基础测试题及答案
- 2022物流专员笔试专业知识考题带全版本答案
- 2024年食品厂IQC入职笔试题及答案
- 2025防止返贫动态监测信息员专项认证 历年真题+高频考点刷题包
- 2026年广州中考生物测试题及答案
- 2021年12月四级写作押题范文就是考试答案直接抄
- 2026年微生物细菌测试题及答案
- 普华永道寒假实习内推通道及笔面试真题合集
- 女方签了抚养费协议书
- 几个股东合作协议书
- 【普法教育】初高中主题班会:知法懂法做明理少年【课件】
- 索尼摄像机DCR-HC21E说明书
- 豪宅防水策划方案(3篇)
- 小红书电商学习中心 -新手小白也能上手的0-1起号策略
- 《义务教育数学课程标准(2022年版)》解读课件
- 脑血管介入科进修汇报
- 卡迪滚筒洗衣机 GO4 DF86说明书
- 部编版八下历史期末复习常考观点速记(新考向)
- 扶梯施工安装管理制度
- 铝锭居间合同协议
- 重症医学教材
评论
0/150
提交评论