MFC音乐播放器实验报告.docx
《MFC音乐播放器实验报告.docx》由会员分享,可在线阅读,更多相关《MFC音乐播放器实验报告.docx(20页珍藏版)》请在冰点文库上搜索。
MFC音乐播放器实验报告
音乐播放器大型实验报告
一、实验目的
通过动手制作基于VC++的音乐播放器,了解播放器的原理。
并通过自己动手,在windows播放器组件的基础上,用自己的算法,去实现自己的界面和自己的播放模式。
二、总体设计
(1)在visualc++环境下设计出一个音乐播放器的界面:
具有打开音乐文件、播放歌曲,、暂停或恢复、停止、调节音量大小的功能;
(2)修改各个控件的属性,并为其添加消息函数;
(3)用媒体控制接口MCI编程为各个消息函数添加代码;
(4)对该音乐播放器编译--运行。
三、实验步骤
(一):
创建MFC应用程序框架:
打开visualc++软件,选择“文件”—“新建”新建一个应用程序文档MFCAppWizard[exe],将工程命名为MFC音乐播放器,选择合适的保存位置,然后“确定”选择基本对话框,完成设置。
(二)编辑对话框:
在工作区内,设计出一个音乐播放器的界面,添加按钮控件:
浏览、播放、暂停、停止,添加一个滑动条控件,一个静态文本,两个编辑框。
然后,依次修改各控件的属性:
1)右击静态文本,选择属性,将标题改为音乐名称:
2)右击编辑框,选择属性,将ID改为IDC_filename
3)右击Button1,选择属性,将ID改为IDC_filechoice,将标题改为浏览
3)右击Button2,选择属性,将ID改为IDC_play,将标题改为播放
4)右击Button3,选择属性,将ID改为IDC_pause,将标题改为暂停
5)右击Button4,选择属性,将ID改为IDC_stop,将标题改为停止
6)右击滑块,ID改为IDC_SLIDER
单击样式,点[P]:
选择顶端/左侧,选择打勾标记。
7)右击编辑框,将ID改为IDC_vol
音乐播放器的界面已经设计完毕,为:
(三)添加代码
1)在头文件处添加
#include"Mmsystem.h"
#include"Digitalv.h"
#pragmacomment(lib,"Winmm.lib")
2)定义全局变量及成员函数。
//定义三个全局变量
HWNDm_hWnd;
DWORDDeviceID;
MCI_OPEN_PARMSmciopenparms;
voidLoad(HWNDhWnd,CStringstrFilepath)
{
m_hWnd=hWnd;
mciSendCommand(DeviceID,MCI_CLOSE,0,0);//在加载文件前先清空上一次播放的设备
mciopenparms.lpstrElementName=strFilepath;//将音乐文件路径传给设备
DWORDdwReturn;
if(dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT,(DWORD)(LPVOID)&mciopenparms))
{
//如果打开文件失败,则将出错信息储存在buffer,并显示出错警告
charbuffer[256];
mciGetErrorString(dwReturn,buffer,256);
MessageBox(hWnd,buffer,"出错警告!
",MB_ICONHAND|MB_ICONERROR|MB_ICONSTOP);
}
DeviceID=mciopenparms.wDeviceID;
//打开文件成功就关联文件到设备
}
voidplay()
{
MCI_PLAY_PARMSmciplayparms;
mciplayparms.dwCallback=(DWORD)m_hWnd;
mciplayparms.dwFrom=0;//每次播放都是从0开始播放
mciSendCommand(DeviceID,MCI_PLAY,MCI_FROM|MCI_NOTIFY,(DWORD)(LPVOID)&mciplayparms);
}
voidpause()
{
mciSendCommand(DeviceID,MCI_PAUSE,0,0);
}
voidresume()
{
mciSendCommand(DeviceID,MCI_RESUME,0,0);
}
voidstop()
{
mciSendCommand(DeviceID,MCI_STOP,0,0);
mciSendCommand(DeviceID,MCI_CLOSE,0,0);
//当点击停止按钮时,将所有的信息都清除掉
}
DWORDsetvolume(DWORDvol)
{
MCI_DGV_SETAUDIO_PARMSsetvolume;//这是设置音量的参数数据结构
setvolume.dwCallback=NULL;
setvolume.dwItem=MCI_DGV_SETAUDIO_VOLUME;//动作是设置音量
setvolume.dwValue=vol;//音量值是vol
mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_ITEM|MCI_DGV_SETAUDIO_VALUE,(DWORD)(LPVOID)&setvolume);
return0;
}
3)编辑各个控件的代码
A)双击“浏览”按钮,弹出一个对话框,选择OK,出现代码,添加:
charszFileFilter[]="mp3文件(*.mp3)|*.mp3|"
"wma文件(*.wma)|*.wma|"
"wav文件(*.wav)|*.wav|"
"所有文件(*.*)|*.*|";
CFileDialogdlg(true,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);
if(dlg.DoModal()==IDOK)
{
CStringstrFilepath=dlg.GetPathName();
CStringstrFilename=dlg.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);
}
B)双击“播放”按钮,弹出一个对话框,选择OK,出现代码,添加:
play();
SetDlgItemText(IDC_pause,"暂停");
C)双击“暂停”按钮,弹出一个对话框,选择OK,出现代码,添加:
CStringstrtemp;
GetDlgItemText(IDC_pause,strtemp);//获取按钮状态
if(strtemp.Compare("暂停")==0)
{
pause();
SetDlgItemText(IDC_pause,"恢复");
}
if(strtemp.Compare("恢复")==0)
{
resume();
SetDlgItemText(IDC_pause,"暂停");
}
D)双击“停止”按钮,弹出一个对话框,选择OK,出现代码,添加:
stop();
SetDlgItemText(IDC_pause,"暂停");
GetDlgItem(IDC_play)->EnableWindow(false);//当stop按钮按下时,播放和暂停应该均不可用
GetDlgItem(IDC_pause)->EnableWindow(false);
E)编辑滑块及编辑框按钮。
右击滑块,选择建立类向导,选择MemberVariables,选择AddVarriable…,在Membervariablename:
处改为m_slider.Category:
处改为Control
右击编辑框,操作同滑块,Membervariablename:
处改为m_int.。
Variabletype:
处改为int
右击滑块,选择建立类向导,在MessageMaps页面,ObjectIDs:
选择IDC_SLIDER,在Messages:
处选择NM_CUSTOMDRAW。
添加滑块及编辑框的代码在图示位置处添加
m_slider.SetRange(0,1000);//滑块的移动范围0~1000
m_slider.SetPos(500);//滑块指针的初始位置设为500代表初始音量为50
GetDlgItem(IDC_play)->EnableWindow(false);//文件没有读取时所有按钮应该是不可选的
GetDlgItem(IDC_pause)->EnableWindow(false);
GetDlgItem(IDC_stop)->EnableWindow(false);
双击滑块按钮,弹出一个对话框,选择OK,添加代码
UpdateData(true);
m_int=m_slider.GetPos()/10;
setvolume(m_slider.GetPos());
UpdateData(false);
四、调试运行
调试时无错误,运行时出来一个MFC界面,就可以添加歌曲,播放音乐了。
至此一个简单的音乐播放器就完成了。
五、总结分析
通过此次实验,我不仅再次熟悉了visualC++环境,还学会了如何使用MCI在visualC++环境下制作一个音乐播放器,,而且也牢固的掌握了媒体控制接口MCI的编程接口知识,当真的做出一个简单的音乐播放器时,非常的开心。
以后要多多学习这方面的知识,争取了解更多的软件基本原理。