版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
1、一、 课程设计要求:设计题目三:基于MFC的多媒体播放器系统实现 1.制作一个具有自己设计风格的媒体播放器。 2.要求能随机选取要播放的文件,实现前进,回退,暂停,循环播放,音量大小调节等基本功能。 3.要求能播放多种格式(至少三种以上)的音频视频格式文件。 4.可以实现其它附加功能(不在要求范围之内) 5.界面良好,功能完善二、 系统的简单操作及功能说明1.简单操作a.浏览按钮:打开程序后点击浏览按钮后会弹出一个窗口,用于添加歌曲,使用者自己找到歌曲的路径并打开。每次只能添加一首歌曲,并把歌曲的路径及其名字等放入播放列表中,并把歌曲的名字放入最近添加的编辑框中。添加成功后,播放、暂停、停止键
2、均由不可选变为可选状态。b.播放按钮:点击播放按钮后,自动执行load函数,并把当前窗口句柄传给load函数。Load函数的主要作用是把音乐文件关联到设备。关联前会清空上一次播放的设备,并将音乐路径传递给设备。然后执行play播放函数。当播放文件错误时会提示错误。c.暂停按钮:点击暂停按钮,执行onpause函数,设备会先获取按钮状态,若显示“暂停”时,执行pause函数,返回暂停消息。并改变按钮状态到“恢复”。如果获取到按钮状态为“恢复”时,则执行resume函数,并把按钮状态改为“暂停”。d.停止按钮:点击停止按钮,执行onstop函数,首先执行stop函数,把所有信息都清除,即终止音乐播
3、放。然后将暂停键上的状态重置为“暂停”,并将播放和暂停键均置为不可选状态。e.上一曲按钮:点击后执行onupper函数,首先获取当前列表框中选中项的下标,若下标为0,即选中列表框中第一项,则获得列表框中总项数,然后将最后一项的名称(路径名)传给设备,然后执行播放按钮的函数,并将列表框选中项选为当前播放的音乐文件(选中项下标判断)。f.下一曲按钮:点击后执行onnext函数。获取当前选中项的下一项的下标,当为最后一项时,则返回第一项,并把该项的路径传递给设备,然后只想播放函数,然后将选中项更新为当前播放项。g.音量滑块:滑块用于音量控制,滑块被等分为1000,而实际使用时则作为整数100使用,打
4、开时滑块默认位置是在50,即音量为50,通过滑块的滑动控制音量的大小,并将结果显示在滑块前的编辑框内。h.播放列表:每次添加歌曲时都会添加到播放列表中,列表中有一个参数和函数,实现在列表框中双击歌曲名字能够播放功能。2.功能说明本软件只能用于音频文件的播放,且只支持MP3 WAV WMA三种格式,通过手动添加歌曲,且每次只能添加一首歌曲,添加后不能直接播放,需要点击播放按钮或者双击播放列表中的歌曲名字。当播放列表中有大于一首歌时,点击上一曲/下一曲能够快捷切换播放歌曲,点击后会直接播放,直接在播放列表中双击某首歌曲的名字也会直接播放。点击停止后,播放、暂停键均变为不可选状态,并且把暂停键重置为
5、暂停。软件通过滑动块控制声音,默认初始为50(满音量为100),当滑动滑块时会在前面的编辑框中显示音量数值。三、 分模块介绍本程序主要分为添加歌曲、播放控制、列表控制三个模块。1.添加歌曲即调用Onfilechoice函数,打开一个窗口,手动添加一首歌曲,将歌曲的路径关联到设备,为播放功能提供对象。2.播放控制分为播放、暂停、恢复、停止、上/下一曲、音量控制子功能。播放及调用Onplay函数,每次播放都是从0开始,返回消息MCI_PLAY。每次点击播放都会从头播放,当正在播放某首歌曲时点击播放也会从头播放,这也是一个问题。暂停及调用Onpause函数,返回消息MCI_PAUSE,并把暂停键标题
6、改为恢复,以便执行恢复功能。恢复即暂停后的继续播放,执行resume函数,点击后会将恢复重置为暂停。停止即停止所播放歌曲,执行Onstop函数,然后将暂停或者恢复标题重置为暂停,并把播放和暂停键均置为不可选状态。当播放列表中大于一首歌时可以使用按钮上/下一曲快捷切歌,且点击后不用点击播放而是直接播放,并将列表框中的光标标记到当前播放歌曲的位置。如果在添加第一首歌后没有在列表框中双击播放而是直接点击播放按钮,列表框中的光标没有选中当前播放歌曲,这时点击下一曲时并不会换歌曲,而是把光标置为当前播放位置。音量通过滑块控制,将滑块分为1000份,对应响应的音量大小,而实际调节时则将滑块的调节范围除以1
7、0,使之更易调节。滑块默认在50,即相对应音量为50。在调节音量的同时,相对应音量大小的数值则显示在前面的编辑框中,使调节更人性化。3.列表控制即列表框内的控制。列表框中有一个参数m_list,并有一个函数OnDblclkList1实现对列表框中歌曲双击能够播放功能。列表框中光标位置还能为上一曲/下一曲功能提供位置标记。另外背景图片是通过添加位图实现的,但有部分失真。四、 各模块源程序及注释1.头文件及全局变量:#include "stdafx.h"#include "音乐播放器.h"#include "音乐播放器Dlg.h"#inc
8、lude "Mmsystem.h"#include "Digitalv.h"#pragma comment(lib,"Winmm.lib")#ifdef _DEBUG#define new DEBUG_NEW#undef THIS_FILEstatic char THIS_FILE = _FILE_;#endif/定义三个全局变量HWND m_hWnd;DWORD DeviceID;MCI_OPEN_PARMS mciopenparms;CString strFilepath;2.其他关键代码:void Load(HWND hWnd,
9、CString strFilepath) m_hWnd=hWnd; mciSendCommand(DeviceID,MCI_CLOSE,0,0);/在加载文件前先清空上一次3.播放的设备 mciopenparms.lpstrElementName=strFilepath;/将音乐文件路径传给设备 DWORD dwReturn; if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPVOID)&mciopenparms) /如果打开文件失败,则将出错信息储存在buffer,并显示出错警告
10、char buffer256; mciGetErrorString(dwReturn,buffer,256); MessageBox(hWnd,buffer,"出错警告!",MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP); DeviceID=mciopenparms.wDeviceID;/打开文件成功就关联文件到设备void play() /播放函数 MCI_PLAY_PARMS mciplayparms;/MCI_PLAY_PARMS包含定位信息的mci_play命令 mciplayparms.dwCallback=(DWORD)m_hWnd;
11、 mciplayparms.dwFrom=0;/每次播放都是从0开始播放 mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciplayparms);/MCI命令消息接口,传递播放MCI_PLAY命令void pause()/暂停函数 mciSendCommand(DeviceID,MCI_PAUSE,0,0);/返回暂定消息MCI_PAUSEvoid resume()/恢复函数 mciSendCommand(DeviceID,MCI_RESUME,0,0);/返回消息MCI_RESUMEvoid
12、 stop()/停止函数 mciSendCommand(DeviceID,MCI_STOP,0,0); mciSendCommand(DeviceID,MCI_CLOSE,0,0);/当点击停止按钮时,将所有的信息都清除掉DWORD setvolume(DWORD vol) MCI_DGV_SETAUDIO_PARMS setvolume;/这是设置音量的参数数据结构 setvolume.dwCallback=NULL; setvolume.dwItem=MCI_DGV_SETAUDIO_VOLUME;/动作是设置音量 setvolume.dwValue=vol;/音量值是vol mciSen
13、dCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO_VALUE,(DWORD)(LPVOID)&setvolume); return 0;4.添加歌曲:void CMyDlg:Onfilechoice() /打开文件添加音乐char szFileFilter="mp3文件(*.mp3)|*.mp3|" "wma文件(*.wma)|*.wma|""wav文件(*.wav)|*.wav|""所有文件(*.*)|*.*|"CF
14、ileDialog dlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);/打开一个对话框POSITION pos=dlg.GetStartPosition();/取第一个迭代器if(dlg.DoModal()=IDOK)/弹出了对话框while(pos!=NULL)CString m_pathname=dlg.GetNextPathName(pos); m_list.AddString(m_pathname);/将路径名传给列表框的路径 strFilepath=dlg.GetPathName(); CString strFilename=dlg.
15、GetFileName();/将打开文件的名字传给编辑框 SetDlgItemText(IDC_filename,strFilename);/Load(this->m_hWnd,strFilepath);/GetDlgItem(IDC_play)->EnableWindow(true);/文件读取成功时所有按钮变可选的 /GetDlgItem(IDC_pause)->EnableWindow(true); /GetDlgItem(IDC_stop)->EnableWindow(true);/将选中的文件加入到播放列表中 / TODO: Add your control
16、notification handler code hereTODO: Add your control notification handler code here5.播放:void CMyDlg:Onplay() Load(this->m_hWnd,strFilepath);play();/ TODO: Add your control notification handler code here6.暂停:void CMyDlg:Onpause() CString strtemp; GetDlgItemText(IDC_pause,strtemp);/获取按钮状态 if(strtem
17、p.Compare("暂停")=0)/ TODO: Add your control notification handler code here pause();/执行暂停函数 SetDlgItemText(IDC_pause,"恢复");/将按钮置为恢复 if(strtemp.Compare("恢复")=0) resume(); SetDlgItemText(IDC_pause,"暂停"); 7.停止:void CMyDlg:Onstop() stop();/执行停止函数 SetDlgItemText(IDC_
18、pause,"暂停");/将暂停或者恢复重置为暂停 GetDlgItem(IDC_play)->EnableWindow(false);/当stop按钮按下时,播放和暂停应该均不可用 GetDlgItem(IDC_pause)->EnableWindow(false);/ TODO: Add your control notification handler code here8.上一曲:void CMyDlg:Onupper() CString str; Int index=m_list.GetCurSel(); /获得当前在列表框中所选项的下标 if(ind
19、ex=0) index=m_list.GetCount(); /如果下标为0表明为第一项,则将获得列表框中总项数 m_list.GetText(index-1,str); mciopenparms.lpstrElementName=str;/将音乐文件路径传给设备 Load(this->m_hWnd,str);/以当前句柄和音乐文件路径为参数执行函数 play(); m_list.SetCurSel(index-1);/将下标置为上一项,即选中所播放的音乐 TODO: Add your control notification handler code here9.下一曲:void CM
20、yDlg:Onnext() / TODO: Add your control notification handler code here CString str; int index=m_list.GetCurSel()+1;/光标加一 if(index>=m_list.GetCount() index=0;/如果播放完最后一曲就自动播放第一首 m_list.GetText(index,str);/获得当前光标所指的路径字符串 mciopenparms.lpstrElementName=str;/将音乐文件路径传给设备 Load(this->m_hWnd,str); play()
21、; m_list.SetCurSel(index);/自动置光标 10.音量控制:void CMyDlg:OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult) UpdateData(true); m_int=m_slider.GetPos()/10;/将滑块的值除以10后赋给编辑框的参数 setvolume(m_slider.GetPos();/调节声音 UpdateData(false);/ TODO: Add your control notification handler code here *pResult = 0; 11.列表框:v
22、oid CMyDlg:OnDblclkList1() CString str; int index=m_list.GetCurSel();/获取选择的行数 m_list.GetText(index,str); mciopenparms.lpstrElementName=str;/将音乐文件路径传给设备 Load(this->m_hWnd,str); play(); CString strFilepath=str; /SetTimer(1,1000,NULL);/ TODO: Add your control notification handler code here五、 程序界面截图1.程序运行时的界面2.添加音乐的界面3.播放界面4.暂停界面5.停止界面6.音量调节及上/下曲界面7.出错界面六、
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年度股权转让合同:某科技公司0%股权的转让及相关事项3篇
- 2025年度医疗设备采购合同范例3篇
- 二零二五年度海洋石油生产安全监控与服务合同2篇
- 2025年度船舶制造及维修合同3篇
- 2024年高品质录膏浆产品销售合同版B版
- 二零二五年度甲醇市场调价与风险对冲合同3篇
- 2025年度外墙仿石漆产品进出口贸易合同3篇
- 2025-2030全球动态偏振控制器行业调研及趋势分析报告
- 2025年度综合维修服务租赁合同样本2篇
- 2025年全球及中国工业级对苄氧基苯酚行业头部企业市场占有率及排名调研报告
- 屋面及防水工程施工(第二版)PPT完整全套教学课件
- 《存量房交易税费申报表》
- 第21套操作真题211小题题目
- 2023版押品考试题库必考点含答案
- 养羊场应急预案演练
- 了解慢阻肺疾病 控制治疗慢阻肺课件
- 粒缺伴发热指南 -中国中性粒细胞缺乏伴发热患者抗菌药物临床应用指南
- 昆明天大矿业有限公司寻甸县金源磷矿老厂箐-小凹子矿段(拟设)采矿权出让收益评估报告
- GB/T 9978.5-2008建筑构件耐火试验方法第5部分:承重水平分隔构件的特殊要求
- GB/T 7409.3-2007同步电机励磁系统大、中型同步发电机励磁系统技术要求
- GB/T 5231-2001加工铜及铜合金化学成分和产品形状
评论
0/150
提交评论