VC++MP3播放器课程设计实验报告.doc_第1页
VC++MP3播放器课程设计实验报告.doc_第2页
VC++MP3播放器课程设计实验报告.doc_第3页
VC++MP3播放器课程设计实验报告.doc_第4页
VC++MP3播放器课程设计实验报告.doc_第5页
已阅读5页,还剩11页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

西安科技大学VC+程序设计课程设计报告 题 目 MP3播放器 院、系(部) 计算机学院软件工程系 专业及班级 软件工程0902 姓 名 王浩 日 期 0908010224 1 题目要求 要求用所学知识编写mp3播放器来实现mp3播放基本功能2 功能需求Mp3播放器基本的添加歌曲,播放,暂停,暂停恢复,停止,下一首,前一首,播放列表,最小化到托盘等3 总体设计3.1 系统模块3.2 系统业务处理流程 4 详细设计1. 新建对话框MFC应用程序2. 添加基类class MCIMP3在头文件中添加#include #pragma comment(lib,winmm.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);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_OPEN_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_dwLength=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_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_WAIT,(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(); 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_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;/得到当前播放文件播放到的地方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 mciSP;mciSP.dwAudio=MCI_SET_AUDIO_ALL;DWORD dwFlags;if(bMute)dwFlags=MCI_WAIT|MCI_SET_AUDIO|MCI_SET_OFF;elsedwFlags=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_STATUS_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_STATUS,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以及变量关联如下表控件名控件类型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. 在CPlayerDlg.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);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);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.bmWidth,bkginfo.bmHeight,SRCCOPY);6. 系统托盘实现 在CPlayerDlg类中添加函数toTray(bool show)void CPlayerDlg:toTray(bool show)/ TODO: Add your control notification handler code hereNOTIFYICONDATA pnid;pnid.cbSize=(DWORD)sizeof(NOTIFYICONDATA);pnid.hIcon=AfxGetApp()-LoadIcon(IDR_MAINFRAME);strcpy(pnid.szTip,MP3播放 );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);elseShell_NotifyIcon(NIM_DELETE,&pnid);ShowWindow(SW_SHOW); 在构造函数中添加ON_MESSAGE(UM_SHOWWINDOW,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 heretoTray(true);7. 实现点击对话框拖动 打开classwizard添加WM_LBUTTONDOWNvoid CPlayerDlg:OnLButtonDown(UINT nFlags, CPoint point) / TODO: Add your message handler code here and/or call defaultPostMessage(WM_NCLBUTTONDOWN,HTCAPTION,MAKELPARAM(point.x, point.y);CDialog:OnLButtonDown(nFlags, point);8. 初始化变量 在构造函数中添加m_time = _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)|*.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); 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.MCIResume();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 & file1=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);16. 对下一首添加消息响应函数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 p;m_list.GetText(n,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. 添加定时器响应滑块的移动在classwizard中添加WM_TIMER消息编辑函数void CPlayerDlg:OnTimer(UINT nIDEvent) if(iGetDlgCtrlID()=IDC_SLIDER1&play=1)KillTimer(1); nPos=m_ctrlSlider.GetPos(); time=nPos*m_mp3player.m_dwLength/100;

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论