MusicBox(音乐播放器)
这两天做了一个小型的音乐播放器,基本功能都已实现,同时也让我对CSliderCtrl,MCI_OPEN_PARMS以及控件之间的消息映射,数据转换等有了更深入的理解,下面是自己编程的详细过程:
1 首先将控件的位置都摆好:
2 在浏览控件所对应的函数中,打开本地文件,选取相应的音乐文件。
void CMusic_BoxDlg::OnBnClickedBtnOpenFile()//路径
{// TODO: 在此添加控件通知处理程序代码、CString strFilter = TEXT("");strFilter = strFilter + TEXT("mp3文件(*.mp3)|*.mp3|") +TEXT("wma文件(*.wma)|*.wma|") + TEXT("wav文件(*.wav)|*.wav|") + TEXT("所有文件(*.*)|*.*|");CFileDialog dlg(true, NULL, NULL, OFN_HIDEREADONLY, strFilter);//打开模态对话框CString pathtemp ;if(dlg.DoModal() == IDOK)//成功{CString filepath = dlg.GetPathName();CString filename = dlg.GetFileName();pathtemp = filepath ;SetDlgItemText(IDC_COMBO1,filename); //FileLoad(this->m_hWnd,filepath); //文件读取成功时所有按钮变成可选GetDlgItem(IDC_BUTTON3)->EnableWindow(true);GetDlgItem(IDC_BUTTON1)->EnableWindow(true);GetDlgItem(IDC_BUTTON2)->EnableWindow(true);}//组合框TCHAR ws[256] ;CComboBox* pfix = (CComboBox*)GetDlgItem(IDC_COMBO1) ;pfix->GetWindowText(ws,256);TCHAR strCBText[256];int i ;for(i=0;i<20;i++){pfix->GetLBText( i, strCBText);if(_tcscmp(ws,strCBText) == 0 ){alreadyadd = 1 ;return ;}}pfix->AddString(ws) ;myvec.push_back(pathtemp) ;}
代码中涉及到组合框的内容,目的是让组合框下拉的内容不会出现重复的信息,同时将每个歌曲文件的路径保存在vector容器之中,方便之后选择音乐名称时,直接获得歌曲路径从而使得音乐正常播放。
3 点击播放按钮,让音乐开始播放
void CMusic_BoxDlg::OnBnClickedButton3()//音乐播放按钮
{// TODO: 在此添加控件通知处理程序代码CString ws ;CComboBox* pfix = (CComboBox*)GetDlgItem(IDC_COMBO1) ;std::vector<CString>::iterator pmusic = myvec.end() ;std::vector<CString>::iterator pmusic2 = myvec.begin() ;int num ;num = -1 ;num = pfix->GetCurSel();if(num<0)//判断有无在下拉列表中选中某一栏{if(alreadyadd == 1)//判断歌曲是否已经添加{pfix->GetWindowText(ws);CString temper ;int i ;for(i=0;i<20;i++){pfix->GetLBText( i, temper);if(_tcscmp(ws,temper) == 0 )//找到已添加歌曲的具体位置{CString road = *(pmusic2 + i) ;FileLoad(m_hWnd,road);alreadyadd = 0 ;musicplay();return ;}}}else{ CString road = *(pmusic - 1) ;FileLoad(m_hWnd,road);}}else{CString strCBText;pfix->GetLBText( num, strCBText);pfix->GetWindowText(ws);if(strCBText == ws)//判断此时添加歌名是否和当前选中歌名一致{CString road = *(pmusic2 + num) ;FileLoad(m_hWnd,road);}else{if(alreadyadd == 1)//判断歌曲是否已经添加{CString temper ;int i ;for(i=0;i<20;i++){pfix->GetLBText( i, temper);if(_tcscmp(ws,temper) == 0 )//找到已添加歌曲的具体位置{CString road = *(pmusic2 + i) ;FileLoad(m_hWnd,road);alreadyadd = 0 ;musicplay();return ;}}}else{ CString road = *(pmusic - 1) ;FileLoad(m_hWnd,road);}}}musicplay(); }
在这里花了较多的代码去实现获取组合框中对应歌曲的路径的功能,这里的组合框下拉内容,可以说就是一个缩小版的歌曲清单。
4 按暂停按钮,让音乐暂停播放,同时使控件名称变为恢复,按下之后可以让音乐继续播放,倘若一开始打开音乐文件失败,控件面板上的播放,暂停,停止按钮是无效的。
void CMusic_BoxDlg::OnBnClickedButton1()//音乐暂停按钮
{// TODO: 在此添加控件通知处理程序代码CString mystate ;CString cs ;GetDlgItemText(IDC_BUTTON1,mystate) ;//获取按钮指示CString str1 = TEXT("暂停");CString str2 = TEXT("恢复");if(mystate == str1 ){mypause() ;SetDlgItemText(IDC_BUTTON1,str2) ;}else if(mystate == str2){myresume() ;SetDlgItemText(IDC_BUTTON1,str1) ;}
}
5 停止播放音乐
void mystop()//请求设备停止播放,所有信息清除
{mciSendCommand(DeviceId,MCI_STOP,0,0) ;mciSendCommand(DeviceId,MCI_CLOSE,0,0) ;
}void CMusic_BoxDlg::OnBnClickedButton2()//音乐停止播放
{// TODO: 在此添加控件通知处理程序代码mystop() ;GetDlgItem(IDC_BUTTON3)->EnableWindow(false) ;//播放和暂停不可选GetDlgItem(IDC_BUTTON1)->EnableWindow(false) ;
}
6 控制音乐音量,这里需要用到slider control控件,在类中定义CSliderCtrl变量,在oninit函数中设置滑动条的移动范围,同时设置滑动条的指针处置位值得值,代表初试音量的大小,在Exchang涵数中将变量与其关联的控件交换数据,将声音具体的大小值以整数的形式输入到编辑框中显示出来
void CMusic_BoxDlg::OnNMCustomdrawSlider1(NMHDR *pNMHDR, LRESULT *pResult)
{LPNMCUSTOMDRAW pNMCD = reinterpret_cast<LPNMCUSTOMDRAW>(pNMHDR);// TODO: 在此添加控件通知处理程序代码UpdateData(true) ;myint = myslider.GetPos() /10 ;//myint = m_nSlider ;setvolume(myslider.GetPos()) ;UpdateData(false) ;*pResult = 0;
}
下面是程序运行后的图片:
编写程序时需要注意不同类型数据之间的转换方式,往空间面板添加控件,尽量使用自己改好的控件id,避免与系统默认的几个关键id重合。
MusicBox(音乐播放器)相关推荐
- react + antd 实现一个音乐播放器
最终呈现结果 传入的prop musicInfoList 数据 [{"id": "001","musicName": "永远 ...
- 树莓派云音乐c语言,基于树莓派的红外遥控版网易云音乐播放器
基于树莓派的红外遥控版网易云音乐播放器.下面是遥控键盘示意图: CH- CH CH+ << >> || - + EQ 0 100+ 200+ 1 2 3 4 5 6 7 8 9 ...
- linux树莓派网易云音乐,基于树莓派的红外遥控版网易云音乐播放器
基于树莓派的红外遥控版网易云音乐播放器.下面是遥控键盘示意图: CH- CH CH+ << >> || - + EQ 0 100+ 200+ 1 2 3 4 5 6 7 8 9 ...
- 完整打造一个多功能音乐播放器项目(初步设想跟酷狗类似)
本人目前准备利用闲暇时间打造一个完整的音乐播放器项目,主要用于学习及分享!原创不易,转载请注明出处. 这是一个什么样的音乐播放器呢?整体的架构跟酷狗差不多吧,我的方式呢,是一个个组件一个个模块先做好, ...
- html5开发一个音乐播放器,HTML5开发学习(1):使用aduio标签打造音乐播放器
关于html5的炒作已经有一段时间了,小弟亦是个跟风之人,对该新鲜事物也充满好奇和期待.本文为该系列(html5尝鲜)第一节,先以一个简单的demo开胃,希望能勾起各位同学对html5的兴趣和关注. ...
- Android 音乐播放器用到的几个方法解说
MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用.下面让我们看一下MediaPlayer类的详细 ...
- html+css+js本地音乐播放器,实现可视化音频频谱
效果 html+css+js本地音乐播放器,实现可视化音频频谱 前言 之前用swing写了个本地音乐播放器(如下图),但是效果一言难尽,界面丑,功能bug也多,唉 所以后面又重新用html写了个,界面 ...
- javascript实现一个自制网页音乐播放器
序 接触简书也有一段日子了,这中间的时光还是比较轻松加愉快的,那种可以和他人分享知识的欣喜和愉悦的确是非常棒.我一向都是觉得专心写自己的文就可以了,不会总是纠结有多少人在看,有多少点击等等.用心写好自 ...
- HTML5+JS实现简易的音乐播放器
HTML5+JS实现简易的音乐播放器 播放器实现的功能 播放/暂停音乐 切换歌曲,上/下一首歌 音量最大或静音 音乐播放时间实时变化 进度条拖拽 歌曲图片切换 播放器效果展示 代码展示 html &l ...
最新文章
- 上海沙龙 - 接口测试自动化经验分享
- 2011百度之星初赛B圆环
- 玩转X-CTR100 l STM32F4 l DAC数字模拟转换
- [BZOJ3600]没有人的算术
- 写给前端工程师的 Flutter 详细教程
- [Azure] Notification Hubs注册模式
- CSS/DIV网页设计视频教程目录【转】
- 将域名绑定到ip上,并实现访问不同二级子域名对应不同目录
- 【数据结构与算法】广度优先遍历(BFS) 深度优先遍历(DFS)
- 查找问题的利器 - Git Bisect
- 『原创』.Net CF下ListView的数据绑定
- 网速变得奇慢说明可能需要安装金山ARP防火墙了
- 禁止存放到内存_暴雨 ! 神木能源局:关于煤炭运输及存放的通告
- java实现qq自动添加好友
- 云计算与虚拟化了解二三事
- 花 30 万招聘的高级程序员,真的值吗?
- 阿里开源mysql监控_Alibaba-技术专区-开源项目之Druid数据库监控平台
- PR字幕不显示的问题(已解决)
- 众人帮怎么发布悬赏任务?发布任务所需要求条件是什么?
- 云计算时代,你需要了解的OpenStack云操作系统