贵州师范大学
Visual C++程序设计课程大作业
题目名称: 基于MFC的音乐播放器 系 名 称: 数学与计算机科学学院 专业班级: 13级数字媒体技术班 姓 名: 潘胜婷 学 号: 130705010054
2015 年 6 月18
目 录
一、成员分工 .................................................... 1 二、需求分析 .................................................... 2 三、总体设计 .................................................... 3 四、详细设计 .................................................... 4 五、系统测试 ................................................... 11 六、总结 .................................................... .. 13 七、参考文献 ................................................... 14
一、 成员分工
组长:潘胜婷 组员:潘胜婷
组长潘胜婷:负责整个工程设计的选材和功能的添加以及代码的设计。 潘胜婷:负责对话框的设计、制作、控件的添加。 潘胜婷:负责工程的功能测试与修改。
1
二、需求分析
我们需要制作一个音乐播放器,具有一般播放*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,还有具有播放、暂停、重复播放、音量调节、Repeat功能等功能。需要解决的问题是向对话框中添加音乐播放的控件,以及各按键功能的实现。
2
三、总体设计
1、系统功能模块图(如图一):
基于MFC的音乐播放播放器开关 音乐播放 音量增减 增删音乐 开启 关闭 播放 暂停 终止 音量加 音量减 添加 删除
图一:系统功能模块图
2、流程图(如图二):
开始 添加音乐 暂停 播放 终止 播放结束 退出
图二:系统流程图
3
四、详细设计
播放 IDC_open; 添加 IDC_fileopen; 暂停 IDC_pause; 删除 IDC_del; 停止 IDC_stop; 退出 IDC_exit;
音乐名编辑框 IDC_filename; 音量控制滑块 IDC_SLIDER1; 音量控制编辑框 IDC_vol;
相应的添加变量:
CRoundButton m_list; CRoundButton m_slider; CRoundButton m_int; 详细步骤:
1、建立基于对话框(Dialog Based)的运用程序。 2、在上面添加按钮,ID和Caption分别为 播放 IDC_open; 添加 IDC_fileopen; 暂停 IDC_pause; 删除 IDC_del; 停止 IDC_stop; 退出 IDC_exit;
音乐名编辑框 IDC_filename; 音量控制滑块 IDC_SLIDER1; 音量控制编辑框 IDC_vol;
3、再打开Projects->Add to Project->Components and Controls->Registered ActiveX Controls对话框,选择其中的Active Movie Control Object, Insert,OK之后,你会发现你的控件面板上多了一项ActiveMovieControl Object,将它选中,直接放在你的对话框上就行了。按Ctrl+W打开ClassWizard为它添加变量CActiveMovie3 m_ActiveMovie。 4.为程序添加消息处理函数。打开 ClassWizard,为各个按钮加入消息处理函数。在MediaPlayerDlg.cpp文件里为各消息处理函数添加代码。
4
(1)首先,在MediaPlayerDlg.h中添加如下:
public:
BOOL flag;
CMediaPlayerDlg(CWnd* pParent = NULL); // standard constructor
(2)添加音乐按钮:
void CPanshengtingDlg::Onfileopen() {
// TODO: Add your control notification handler code here char filefiler[]=\"mp3文件(*.mp3)|*.mp3|\"
\"wma文件(*.wma)|*.wma|\"
\"wav文件(*.wav)|*.wav|\"; CFileDialog
dlg(true,NULL,NULL,OFN_HIDEREADONLY|OFN_ALLOWMULTISELECT|OFN_ENABLESIZING,filefiler);
if (dlg.DoModal()==IDOK) {
CString strfilepath=dlg.GetPathName(); CString strfilename=dlg.GetFileName(); SetDlgItemText(IDC_filename,strfilename); CString mtime; CClientDC dc(this); hour=0;minute=0;second=0;
dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观
5
dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色
mtime.Format(\"%02d:%02d:%02d\显示时间进度
dc.TextOut(280,100,mtime);
panshengting panshengting; panshengting.Load(this->m_hWnd,strfilepath); GetDlgItem(IDC_open)->EnableWindow(TRUE); GetDlgItem(IDC_pause)->EnableWindow(TRUE); GetDlgItem(IDC_stop)->EnableWindow(TRUE);
GetDlgItem(IDC_del)->EnableWindow(TRUE);
m_list.InsertString(m_list.GetCount(),strfilename);//获取文件名 m_list.SetCurSel(m_list.GetCount()-1);
} }
(3)播放音乐按钮:
void CPanshengtingDlg::Onopen() { // TODO: Add your control notification handler code here CString strfilename;
int index=m_list.GetCurSel(); CString mtime;
CClientDC dc(this); 6
if(commp!=NULL) { commp->Stop(); delete(commp);
}
commp=new panshengting; hour=0;minute=0;second=0;
dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观 dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色
mtime.Format(\"%02d:%02d:%02d\显示时间进度dc.TextOut(280,100,mtime); if(index==-1) { MessageBox(\"请添加音乐\"); return; }
m_list.GetText(index,strfilename); SetDlgItemText(IDC_filename,strfilename);
commp->Load(this->m_hWnd,strfilename); commp->Play();
7
commp->Stop();
SetTimer(0,1000,NULL);
GetDlgItem(IDC_open)->EnableWindow(TRUE); GetDlgItem(IDC_pause)->EnableWindow(TRUE); GetDlgItem(IDC_stop)->EnableWindow(TRUE); GetDlgItem(IDC_del)->EnableWindow(TRUE);
}
(4)停止播放按钮:
void CPanshengtingDlg::Onstop() { // TODO: Add your control notification handler code here if(commp!=NULL) { commp->Stop(); delete(commp); //commp3=NULL;
}
commp=new(panshengting);
SetDlgItemText(IDC_pause,\"暂停\"); KillTimer(0);//取消计数器的显示 CString mtime; CClientDC dc(this); hour=0;minute=0;second=0;
dc.SetBkColor(RGB(124,252,0));//设置放置计数器区域的外观8
dc.SetTextColor(RGB(255,255,203));//设置数字显示的颜色
mtime.Format(\"%02d:%02d:%02d\显示时间进度 dc.TextOut(280,100,mtime);
//GetDlgItem(IDC_open)->EnableWindow(FALSE); GetDlgItem(IDC_pause)->EnableWindow(FALSE);
GetDlgItem(IDC_stop)->EnableWindow(FALSE);
//GetDlgItem(IDC_del)->EnableWindow(FALSE); }
(5)暂停播放按钮:
void CPanshengtingDlg::Onpause() { // TODO: Add your control notification handler code here CString strtemp; if(commp==NULL) { return;
}
GetDlgItemText(IDC_pause,strtemp);//获取按钮状态 if (strtemp.Compare(\"暂停\")==0) { commp->Pause();
SetDlgItemText(IDC_pause,\"继续\"); KillTimer(0);//取消计数器的显示 }
if (strtemp.Compare(\"继续\")==0) {
commp->resum();
9
}
(6)音量调节按钮:
DWORD panshengting::Setvolumn(DWORD vol) {
MCI_DGV_SETAUDIO_PARMS mcisetvolumn; mcisetvolumn.dwCallback=NULL;
mcisetvolumn.dwItem=MCI_DGV_SETAUDIO_VOLUME; mcisetvolumn.dwValue=vol;
mciSendCommand(DeviceID,MCI_SETAUDIO,MCI_DGV_SETAUDIO_VALUE|MCI_DGV_SETAUDI }
SetTimer(0,1000,NULL);
SetDlgItemText(IDC_pause,\"暂停\");
O_ITEM,(DWORD)(LPVOID)&mcisetvolumn); }
return 0;
五、系统测试
10
1、打开初始程序(如图三):
图三;程序初始界面
2、点击“打开”,添加播放资源(如图四)。
图四;音乐库
11
3、单击“播放”,开始播放。点击“暂停”,暂停播放。再次点击“暂停”按钮,继续播放(如图五)。
图五;播放
4、单击“终止”,音乐播放停止,之后单击“播放”,重头开始播放。 5、单击“最小化”。播放器消失,再次点击出现。(如图六)
图六;隐藏进度条
12
六、总结
本次实验设计在本组成员团结合作下,终于完成了。仔细回想起实验设计,发现在软件设计的功能上,我们做的虽没有特别新的功能,但做出的功能都比较实用,做出了一个音乐播放器所必备的元素,在这一点上还是比较成功的。我们设计的播放器小巧,比较节省空间。当然,这个播放器也有许多的不足之处,如播放器的功能太少,太过于简单,播放器的画面太单调,很空洞,当然,这些地方都需要改进,虽然本次试验设计做的不是很完美,但我们从中获得了很多经验,起码下次再做类似的的设计时更能节省时间且能做的更好更快。从本次实验设计中,我们学到了很多东西,如在计算机编程设计中,团队合作是十分重要的:要经常的编写一些程序,这样编写程序时才能很灵活。
13
七、参考文献
郑阿奇 丁有和 编著 visual C++教程(第2版).机械工业出版社.2008年8月. 候俊杰 编著 深入浅出MFC(第二版).华中科技大学出版社.2001年1月. David J. Kruglinski Visual C++技术内幕(第四版).清华大学出版社. 1999年1月.
孙鑫 余安萍 编著 vc++深入详解.电子工业出版社.2006年6月.
14
因篇幅问题不能全部显示,请点此查看更多更全内容