MusicBox(音乐播放器)

article/2025/11/5 19:02:46

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



http://chatgpt.dhexx.cn/article/HOhcrR5B.shtml

相关文章

musicbox使用方法_使用Pi MusicBox收听流音乐

musicbox使用方法 在用Raspberry Pi 控制圣诞树灯的项目完成之后&#xff0c;下一个项目是什么&#xff1f; 我最终开始尝试使用Pi Musicbox进行修补&#xff0c;这是Mopidy的Raspbian的一种版本 &#xff0c;它允许用户在“无头”的Raspberry Pi上播放各种流媒体服务&#xff…

推荐一个高大上的网易云音乐命令行播放工具:musicbox

网易云音乐上有很多适合程序猿的歌单&#xff0c;但是今天文章介绍的不是这些适合程序员工作时听的歌&#xff0c;而是一个用Python开发的开源播放器&#xff0c;专门适用于网易云音乐的播放。这个播放器的名称为MusicBox, 特色是用命令行版本执行音乐的播放。 github地址&…

移动开发技术(三)MusicBox

实验要求 使用广播机制&#xff0c;编写音乐盒代码&#xff0c;添加音乐播放的播放、暂停、停止、上一首和下一首控制 实验步骤 一、布局设置 添加一个LinearLayout&#xff0c;选择垂直分布。在里面添加两个LinearLayout&#xff1a; ①music_show&#xff1a;用于展示图片…

Gap Statistic算法详解

在Kmean算法确定K值的问题里&#xff0c;可以使用手肘法&#xff0c;也可以用Gap statistic 算法。手肘法的缺点是不够自动化&#xff0c;而Gap不再需要“手肘法”式的肉眼判断&#xff0c;而只需要找出使Gap Statistic最大的K值即可。因此&#xff0c;Gap和适用于批量化作业。…

IDEA 统计插件Statistic:查看你的代码量

最近接触了一款IDEA统计代码量的插件Statistic&#xff0c;简介一下Statistic的安装。 一、插件下载安装 File->Settings->Plugins&#xff0c;输入Statistic&#xff0c;点击install,安装完后选择重启idea。 二、运行使用 重启完后&#xff0c;点击refesh即可看到代码量…

idea中安装统计代码statistic插件

百度一圈都是直接在idea中安装statistic插件&#xff0c;就不再重复 1.从官网下载&#xff1a;http://plugins.jetbrains.com/plugin/4509-statistic/versions 插件包 到本地 2.选择从本地安装 3. 4.重启idea 5.工具栏

探索 t Statistic的稳健性

探索 t Statistic的稳健性 探索t-statistic 的稳健性 假设有2组数据&#xff0c;x1,…,xm; y1,…,yn。 t-test的假设为两组数据的平均值无差异 即&#xff1a; 令X和Sx为为x数组的平均值和标准差&#xff0c;Y和Sy为y数组的平均值和标准差&#xff1b;则H0的判别式为 在H0…

AS 使用Statistic插件统计代码行数

1.下载插件及安装 点击File → Setting→ Plugins&#xff0c;搜索Statistic插件&#xff0c;点击install按钮安装插件。 2.插件使用 安装成功后重启AS&#xff0c;在View→Tool Windows→Statistic&#xff0c;选择后AS底部会显示Statistic按钮&#xff0c; 点击Refresh按钮…

IDEA 统计Statistic插件下载地址

IDEA 统计Statistic插件安装地址 https://plugins.jetbrains.com/plugin/4509-statistic/versions

idea-统计代码行数Statistic

idea统计代码行数可以用到插件&#xff1a;Statistic。 步骤&#xff1a; File→Settings进入Plugins点击Marketplace搜索Statistic 安装蓝框标出的插件 重启idea后就可以看到效果了&#xff08;图是拿的别人的&#xff0c;基本就是这效果&#xff09;如果没有下边的stat…

IDEA代码统计插件Statistic-统计项目代码文件数及代码行数

今天被问到项目的代码量及代码行数&#xff0c;由于项目代码量还挺多&#xff0c;第一时间想到idea有没有插件可以统计&#xff0c;经过搜索&#xff0c;还真有&#xff0c;当然也可以自己写代码实现。 以下介绍Statistic的安装及使用。 1、在IDEA左上角点击File->Setting…

idea中代码统计工具Statistic的配置与使用

idea中代码统计工具Statistic的配置与使用 有的同学在idea中下载了statistic的插件但是就是没看到这个插件的标志&#xff0c;这是因为插件对应了不同的版本,需要下载对应的版本&#xff1a;https://plugins.jetbrains.com/plugin/4509-statistic/versions 下载完成之后File—…

Intellij idea使用Statistic统计代码行数的方法

一、安装Statistic 1、打开IDEA 2、打开settings进行设置 3、选择plugins&#xff0c;搜索Statistic并安装 4、下载完成之后&#xff0c;重启IDEA&#xff0c;此时Statistic就安装好了 二、使用Statistic 1、安装好Statistic之后我们可以通过以下步骤 将Statistic插件的控制台展…

IDEA - 如何安装Statistic代码统计插件?

插件地址 插件下载 插件选择 &#xff08;1&#xff09;如果IDEA的版本比较新&#xff0c;IDEA会自动选择Statistic对应的版本&#xff1b; &#xff08;2&#xff09;如果IDEA的版本比较老&#xff0c;请使用Statistic的3.8.1版本。 如何安装 1. 在线搜索并安装 2. 离线…

GIT统计代码量及IDEA Statistic统计解析

GIT统计代码量 Git统计个人提交代码行数 git log --format%aN | sort -u | while read name; do echo -en "$name\t"; git log --author"$name" --prettytformat: --numstat | awk { add $1; subs $2; loc $1 - $2 } END { printf "added lines:…

idea查看代码行数Statistic

软著需要知道代码行数&#xff0c;安装Statistic插件即可。 安装后&#xff0c;重启&#xff0c;点击左下角“refresh”即可查看各类文件行数 可以设置统计代码的文件格式

IDEA统计代码量Statistic插件

IDEA统计代码量Statistic插件 Statistic插件安装步骤1、步骤&#xff08;文字&#xff09;2、步骤&#xff08;图&#xff09; 结尾 Statistic插件 Statistic插件&#xff0c;IDEA中用来统计代码量的插件&#xff0c;话不多说上步骤。安装步骤 1、步骤&#xff08;文字&#…

Android Studio代码统计插件Statistic

一、打开 AS -> File -> Settings -> Plugins&#xff0c;搜索statistic&#xff0c;在线安装即可 二、安装完成后&#xff0c;在AS底部找到Statistic 三、点击Statistic&#xff0c;打开界面&#xff0c;如果没有数据&#xff0c;点击Refresh按钮刷新

统计项目代码行数 intelliJ idea statistic 插件

任务需求是让你统计一下&#xff0c;现在涉及到的每个模块的代码的行数&#xff0c;这个任务怎么实现呢&#xff1f;哎&#xff0c;这idea竟然有个现成的插件&#xff0c;直接拿来用&#xff0c;就能实现对源码的简单分析和统计。直接在idea的插件仓库里面搜索“statistic”&am…

IDEA 集成Statistic插件

背景&#xff1a;当项目开发结束之后&#xff0c;客户在统计相关数据汇报工作时经常会向开发方索要代码行数。作为一个程序员&#xff0c;绝对不会一行一行的去数&#xff0c;也很少有程序员每天将自己的写的代码行数记录下来&#xff0c;最后汇总在一起。程序员的思维就是借助…