1、红色MP3播放器西安理工大学高科学院计算机科学与技术题 目 简单音乐播放器 学 部 计算机科学与技术 班 级 09级计算机科学与技术 姓 名 刘洋 张丹 王韦康 惠翔翔 2012年9月至2012年11月1 题目要求要求用所学知识编写mp3播放器来实现mp3播放基本功能2 功能需求Mp3播放器基本的添加歌曲,播放,暂停,暂停恢复,停止,下一首,前一首,播放列表,最小化到托盘等3 总体设计3.1 系统模块3.2 系统业务处理流程 4 详细设计4.详细设计1. 新建对话框MFC应用程序2. 添加基类class MCIMP3在头文件中添加#include #pragma comment(lib,win
2、mm.lib)类成员public:MCIMP3(); virtual MCIMP3(); DWORD MCIOpen(const CString &strPath); DWORD MCIClose(); DWORD MCIPlay(); DWORD MCIPause(); DWORD MCIResume(); DWORD MCIStop(); DWORD MCISetMute(BOOL bMute); DWORD MCIGetLength(DWORD *dwReturn); DWORD MCIGetPos(DWORD *dwPos); DWORD MCISeekTo(DWORD dwTo);
3、DWORD MCISeekToStart(); DWORD MCISeekToEnd(); BOOL MCIIsPlaying(); BOOL MCIIsOpened();DWORD m_dwLength;protected: MCIDEVICEID m_wID;在类实现文件MCIMP3.cpp中添加如下代码/构造函数MCIMP3:MCIMP3() m_wID=NULL; m_dwLength=0;/析构函数MCIMP3:MCIMP3()MCIClose();/打开MCI设备 参数为文件地址DWORD MCIMP3:MCIOpen(const CString &strPath) MCI_OPE
4、N_PARMS mciOP; DWORD dwReturn; ASSERT(m_wID=NULL); mciOP.lpstrDeviceType=NULL; mciOP.lpstrElementName=strPath; dwReturn=mciSendCommand(NULL,MCI_OPEN,MCI_OPEN_ELEMENT|MCI_WAIT|MCI_OPEN_SHAREABLE, (DWORD)(LPVOID)&mciOP); if (dwReturn=0) m_wID=mciOP.wDeviceID; if(this-MCIGetLength(&m_dwLength)!=0) m_dw
5、Length=0; else m_wID=NULL; return dwReturn;/关闭MCI设备DWORD MCIMP3:MCIClose() MCI_GENERIC_PARMS mciGP; DWORD dwReturn; dwReturn=mciSendCommand(m_wID,MCI_CLOSE,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP); m_wID=NULL; return dwReturn;/播放DWORD MCIMP3:MCIPlay() MCI_PLAY_PARMS mciPP; return mciSendCommand(m
6、_wID,MCI_PLAY,MCI_NOTIFY, (DWORD)(LPVOID)&mciPP);/暂停DWORD MCIMP3:MCIPause() MCI_GENERIC_PARMS mciGP; return mciSendCommand(m_wID,MCI_PAUSE,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP);/继续 (从暂停恢复)DWORD MCIMP3:MCIResume() MCI_GENERIC_PARMS mciGP; return mciSendCommand(m_wID,MCI_RESUME,MCI_NOTIFY|MCI_WA
7、IT, (DWORD)(LPVOID)&mciGP);/停止播放DWORD MCIMP3:MCIStop() MCI_GENERIC_PARMS mciGP; return mciSendCommand(m_wID,MCI_STOP,MCI_NOTIFY|MCI_WAIT, (DWORD)(LPVOID)&mciGP);/到dwTo处DWORD MCIMP3:MCISeekTo(DWORD dwTo) DWORD dwreturn; if (dwTo0& dwTo=m_dwLength) dwreturn=MCISeekToEnd(); else dwreturn=MCISeekToStart
8、(); return dwreturn;/到开始处DWORD MCIMP3:MCISeekToStart() MCI_SEEK_PARMS mciSP; return mciSendCommand(m_wID,MCI_SEEK, MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_START,(DWORD)(LPVOID)&mciSP);/到结束处DWORD MCIMP3:MCISeekToEnd() MCI_SEEK_PARMS mciSP; return mciSendCommand(m_wID,MCI_SEEK,MCI_WAIT|MCI_NOTIFY|MCI_SEEK_TO_
9、END, (DWORD)(LPVOID)&mciSP);/得到播放文件长度DWORD MCIMP3:MCIGetLength(DWORD *dwLength) MCI_STATUS_PARMS mciSP; mciSP.dwItem=MCI_STATUS_LENGTH; DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP); if(dwReturn=0) *dwLength=mciSP.dwReturn/1000; return dwReturn;/得到当前播放文件播放到的地
10、方DWORD MCIMP3:MCIGetPos(DWORD *dwPos) MCI_STATUS_PARMS mciSP; mciSP.dwItem=MCI_STATUS_POSITION; DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP); if(dwReturn=0) *dwPos=mciSP.dwReturn/1000; return dwReturn;/静音DWORD MCIMP3:MCISetMute(BOOL bMute) MCI_SET_PARMS mciS
11、P; mciSP.dwAudio=MCI_SET_AUDIO_ALL; DWORD dwFlags; if(bMute) dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_OFF; else dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_ON; return mciSendCommand(m_wID,MCI_SET,dwFlags, (DWORD)(LPVOID)&mciSP);/判断是否播放BOOL MCIMP3:MCIIsPlaying() MCI_STATUS_PARMS mciSP; mciSP.dwItem=MCI_STAT
12、US_MODE; DWORD dwReturn=mciSendCommand(m_wID,MCI_STATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP); if(dwReturn=0) if(mciSP.dwReturn=MCI_MODE_PLAY) return true; return false;/判断是否打开BOOL MCIMP3:MCIIsOpened() MCI_STATUS_PARMS mciSP; mciSP.dwItem=MCI_STATUS_MODE; DWORD dwReturn=mciSendCommand(m_wID,MCI_ST
13、ATUS,MCI_STATUS_ITEM, (DWORD)(LPVOID)&mciSP); if(dwReturn=0) if(mciSP.dwReturn=MCI_MODE_OPEN| mciSP.dwReturn=MCI_MODE_PLAY| mciSP.dwReturn=MCI_MODE_PAUSE| mciSP.dwReturn=MCI_MODE_STOP| mciSP.dwReturn=MCI_MODE_SEEK) return true; return false;3. 按如图方式添加控件 对话框属性改为无边框,列表框属性也为无边框 编辑框改为只读无边框各按钮以及控件ID以及变量关
14、联如下表控件名控件类型ID变量类型变量关联正在播放静态文本示例编辑框编辑框ID_NAMECStringpath示例编辑框编辑框ID_TIMECStringm_time列表框IDC_LISTCListBoxm_list滑块IDC_SLIDER1CSliderCrtlm_ctrlSlider?按钮ID_ABOUT-按钮ID_MIN退出按钮ID_EXIT添加按钮ID_OPEN上一首按钮ID_PRE播放按钮ID_PLAY暂停按钮ID_PAUSE下一首按钮ID_NEXT继续按钮IDC_RESUME停止按钮ID_STOPList按钮ID_LISTBUTTDel按钮ID_DELLIST4在CPlayerDl
15、g.h中在CPlayDlg类内添加pubilc成员变量int flag; int j; int pause; void view(); CString str1; CString str; int file1; int play; int time; int nPos; int temp; int i; CString m_Path;MCIMP3 m_mp3player;5.引入背景位图并改ID为IDB_BEIJING和IDB_BEIJINGM 在OnPaint函数中else后屏蔽CDialog:OnPaint();在后面添加如下代码 if(flag=1) CPaintDC dc(this);
16、 CDC memdc; memdc.CreateCompatibleDC(&dc); CBitmap bkg; bkg.LoadBitmap(IDB_BEIJING); BITMAP bkginfo; bkg.GetBitmap(&bkginfo); memdc.SelectObject(&bkg); RECT rect; GetWindowRect(&rect); dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top, &memdc,0,0,bkginfo.bmWidth,bkginfo.bmHeight,SRCCOPY);
17、if(flag=0) CPaintDC dc(this); CDC memdc; memdc.CreateCompatibleDC(&dc); CBitmap bkg; bkg.LoadBitmap(IDB_BEIJINGM); BITMAP bkginfo; bkg.GetBitmap(&bkginfo); memdc.SelectObject(&bkg); RECT rect; GetWindowRect(&rect); dc.StretchBlt(0,0,rect.right-rect.left,rect.bottom-rect.top, &memdc,0,0,bkginfo.bmWid
18、th,bkginfo.bmHeight,SRCCOPY); 6.系统托盘实现 在CPlayerDlg类中添加函数toTray(bool show)void CPlayerDlg:toTray(bool show) / TODO: Add your control notification handler code here NOTIFYICONDATA pnid; pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); pnid.hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME); strcpy(pnid.szTip,MP3播放 )
19、; pnid.hWnd=m_hWnd; pnid.uCallbackMessage=UM_SHOWWINDOW; pnid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; pnid.uID=ID_TASKBARICON; pnid.uID=(UINT)m_hIcon; if(show) Shell_NotifyIcon(NIM_ADD,&pnid); ShowWindow(SW_HIDE); else Shell_NotifyIcon(NIM_DELETE,&pnid); ShowWindow(SW_SHOW); 在构造函数中添加ON_MESSAGE(UM_SHOWW
20、INDOW,OnNotifyIcon)到BEGIN_MESSAGE_MAP(CPlayerDlg, CDialog)和END_MESSAGE_MAP()之间添加函数void CPlayerDlg:OnNotifyIcon(WPARAM wParam, LPARAM lParam) switch(lParam) case WM_LBUTTONDBLCLK: toTray(false); break; 最后对 按钮- 添加消息响应函数void CPlayerDlg:OnMin() / TODO: Add your control notification handler code here toT
21、ray(true);7.实现点击对话框拖动 打开classwizard添加WM_LBUTTONDOWNvoid CPlayerDlg:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call default PostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y); CDialog:OnLButtonDown(nFlags, point);8.初始化变量 在构造函数中添加m_time
22、= _T(); path = _T(); i=0;temp=0;nPos=0;play=0;file1=0;pause=0;j=0;flag=0;9.对?按钮添加消息响应函数void CPlayerDlg:OnAbout() CAboutDlg dlg; dlg.DoModal();10.对退出按钮添加消息响应函数void CPlayerDlg:OnExit() exit(0);11.对添加按钮添加消息响应函数void CPlayerDlg:OnOpen() CFileDialog file(TRUE,NULL,NULL,OFN_HIDEREADONLY,MP3 Files (*.mp3)|*
23、.mp3|AVI Files(*.avi)|*.avi|WAV Files(*.wav)|*.wav|WMA Files(*.wma)|*.wma);file.DoModal();m_Path=file.GetPathName();int nIndex=m_list.InsertString(-1,m_Path);m_list.SetCurSel(j); j+;file1=1;12.对播放按钮添加消息响应函数void CPlayerDlg:OnPlay() if(play=0&file1=1) m_ctrlSlider.SetRange(0,100); SetTimer(1,1000,NULL
24、); m_mp3player.MCIOpen(m_Path); m_mp3player.MCIPlay(); play=1; path=m_Path; UpdateData(FALSE); 13.对暂停按钮添加消息响应函数void CPlayerDlg:OnPause() if(play=1) KillTimer(1); m_mp3player.MCIPause(); pause=1; 14.对继续按钮添加消息响应函数void CPlayerDlg:OnResume() if(play=1&pause=1) SetTimer(1,1000,NULL); m_mp3player.MCIResum
25、e(); 15.对停止按钮添加消息响应函数void CPlayerDlg:OnStop() if(play=1) m_mp3player.MCIStop(); KillTimer(1); m_ctrlSlider.SetPos(0); / m_mp3player.MCISeekTo(0); m_mp3player.MCIClose(); play=0; file1=0; i=0; view(); UpdateData(FALSE);16.对上一首按钮添加消息响应函数void CPlayerDlg:OnPre() int n=m_list.GetCurSel(); if( play=1 & fi
26、le1=1 & n-1=0) CString p; KillTimer(1); m_list.GetText(n-1,p); m_Path=p; i=0; m_list.SetCurSel(n-1); OnStop(); file1 = 1; play = 1; m_mp3player.MCIOpen(m_Path); m_mp3player.MCIPlay(); path=m_Path; SetTimer(1,1000,NULL); if(play=1 & file1=1 & n-10) KillTimer(1); m_list.SetCurSel(j-1); CString p; m_list.GetText(j-1,p); m_Path=p; i=0; OnStop(); file1 = 1; play = 1; m_mp3player.MCIOpen(m_Path); m_mp3player.MCIPlay(); path=m_Path; SetTimer(1,1000,NULL); 17.对下一首添加消息响应函数void CPlayerDlg:OnNext() int n=m_list.GetCurSel(); if( play=1 & file1=1 & n+1=j) n=0; KillTimer(1); m_list.SetCurSel(n); CString
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1