这两天做了一个小型的音乐播放器,基本功能都已实现,同时也让我对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(音乐播放器)相关推荐

  1. react + antd 实现一个音乐播放器

    最终呈现结果 传入的prop   musicInfoList  数据 [{"id": "001","musicName": "永远 ...

  2. 树莓派云音乐c语言,基于树莓派的红外遥控版网易云音乐播放器

    基于树莓派的红外遥控版网易云音乐播放器.下面是遥控键盘示意图: CH- CH CH+ << >> || - + EQ 0 100+ 200+ 1 2 3 4 5 6 7 8 9 ...

  3. linux树莓派网易云音乐,基于树莓派的红外遥控版网易云音乐播放器

    基于树莓派的红外遥控版网易云音乐播放器.下面是遥控键盘示意图: CH- CH CH+ << >> || - + EQ 0 100+ 200+ 1 2 3 4 5 6 7 8 9 ...

  4. 完整打造一个多功能音乐播放器项目(初步设想跟酷狗类似)

    本人目前准备利用闲暇时间打造一个完整的音乐播放器项目,主要用于学习及分享!原创不易,转载请注明出处. 这是一个什么样的音乐播放器呢?整体的架构跟酷狗差不多吧,我的方式呢,是一个个组件一个个模块先做好, ...

  5. html5开发一个音乐播放器,HTML5开发学习(1):使用aduio标签打造音乐播放器

    关于html5的炒作已经有一段时间了,小弟亦是个跟风之人,对该新鲜事物也充满好奇和期待.本文为该系列(html5尝鲜)第一节,先以一个简单的demo开胃,希望能勾起各位同学对html5的兴趣和关注. ...

  6. Android 音乐播放器用到的几个方法解说

    MediaPlayer类可用于控制音频/视频文件或流的播放,我曾在<Android开发之基于Service的音乐播放器>一文中介绍过它的使用.下面让我们看一下MediaPlayer类的详细 ...

  7. html+css+js本地音乐播放器,实现可视化音频频谱

    效果 html+css+js本地音乐播放器,实现可视化音频频谱 前言 之前用swing写了个本地音乐播放器(如下图),但是效果一言难尽,界面丑,功能bug也多,唉 所以后面又重新用html写了个,界面 ...

  8. javascript实现一个自制网页音乐播放器

    序 接触简书也有一段日子了,这中间的时光还是比较轻松加愉快的,那种可以和他人分享知识的欣喜和愉悦的确是非常棒.我一向都是觉得专心写自己的文就可以了,不会总是纠结有多少人在看,有多少点击等等.用心写好自 ...

  9. HTML5+JS实现简易的音乐播放器

    HTML5+JS实现简易的音乐播放器 播放器实现的功能 播放/暂停音乐 切换歌曲,上/下一首歌 音量最大或静音 音乐播放时间实时变化 进度条拖拽 歌曲图片切换 播放器效果展示 代码展示 html &l ...

最新文章

  1. 上海沙龙 - 接口测试自动化经验分享
  2. 2011百度之星初赛B圆环
  3. 玩转X-CTR100 l STM32F4 l DAC数字模拟转换
  4. [BZOJ3600]没有人的算术
  5. 写给前端工程师的 Flutter 详细教程
  6. [Azure] Notification Hubs注册模式
  7. CSS/DIV网页设计视频教程目录【转】
  8. 将域名绑定到ip上,并实现访问不同二级子域名对应不同目录
  9. 【数据结构与算法】广度优先遍历(BFS) 深度优先遍历(DFS)
  10. 查找问题的利器 - Git Bisect
  11. 『原创』.Net CF下ListView的数据绑定
  12. 网速变得奇慢说明可能需要安装金山ARP防火墙了
  13. 禁止存放到内存_暴雨 ! 神木能源局:关于煤炭运输及存放的通告
  14. java实现qq自动添加好友
  15. 云计算与虚拟化了解二三事
  16. 花 30 万招聘的高级程序员,真的值吗?
  17. 阿里开源mysql监控_Alibaba-技术专区-开源项目之Druid数据库监控平台
  18. PR字幕不显示的问题(已解决)
  19. 众人帮怎么发布悬赏任务?发布任务所需要求条件是什么?
  20. 云计算时代,你需要了解的OpenStack云操作系统

热门文章

  1. Zepeto难逃昙花一现的命运 但虚拟形象的未来不得不引人深思
  2. RPR_ABAP_SOURCE_SCAN:扫描代码,查找字符串_SAP刘梦_新浪博客
  3. angular实现图片懒加载
  4. 单相过零锁相(PLL)
  5. Udacity课程-关于交易策略的机器学习(佐治亚理工CS7646)
  6. 安装mayavi出错
  7. 关于腾讯云调用api 下载 自动备份
  8. 西门子精智面板实现画面返回功能
  9. 笔记(一):Maven+SSM之HelloSpring
  10. C++入门教程(三十五):函数类型