![VC課程設(shè)計--基于MFC的多媒體播放器系統(tǒng)實現(xiàn)_第1頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/337432a3-8175-4020-b39e-01e4747244dc/337432a3-8175-4020-b39e-01e4747244dc1.gif)
![VC課程設(shè)計--基于MFC的多媒體播放器系統(tǒng)實現(xiàn)_第2頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/337432a3-8175-4020-b39e-01e4747244dc/337432a3-8175-4020-b39e-01e4747244dc2.gif)
![VC課程設(shè)計--基于MFC的多媒體播放器系統(tǒng)實現(xiàn)_第3頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/337432a3-8175-4020-b39e-01e4747244dc/337432a3-8175-4020-b39e-01e4747244dc3.gif)
![VC課程設(shè)計--基于MFC的多媒體播放器系統(tǒng)實現(xiàn)_第4頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/337432a3-8175-4020-b39e-01e4747244dc/337432a3-8175-4020-b39e-01e4747244dc4.gif)
![VC課程設(shè)計--基于MFC的多媒體播放器系統(tǒng)實現(xiàn)_第5頁](http://file3.renrendoc.com/fileroot_temp3/2022-2/9/337432a3-8175-4020-b39e-01e4747244dc/337432a3-8175-4020-b39e-01e4747244dc5.gif)
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、一、 課程設(shè)計要求:設(shè)計題目三:基于MFC的多媒體播放器系統(tǒng)實現(xiàn) 1.制作一個具有自己設(shè)計風(fēng)格的媒體播放器。 2.要求能隨機(jī)選取要播放的文件,實現(xiàn)前進(jìn),回退,暫停,循環(huán)播放,音量大小調(diào)節(jié)等基本功能。 3.要求能播放多種格式(至少三種以上)的音頻視頻格式文件。 4.可以實現(xiàn)其它附加功能(不在要求范圍之內(nèi)) 5.界面良好,功能完善二、 系統(tǒng)的簡單操作及功能說明1.簡單操作a.瀏覽按鈕:打開程序后點擊瀏覽按鈕后會彈出一個窗口,用于添加歌曲,使用者自己找到歌曲的路徑并打開。每次只能添加一首歌曲,并把歌曲的路徑及其名字等放入播放列表中,并把歌曲的名字放入最近添加的編輯框中。添加成功后,播放、暫停、停止鍵
2、均由不可選變?yōu)榭蛇x狀態(tài)。b.播放按鈕:點擊播放按鈕后,自動執(zhí)行l(wèi)oad函數(shù),并把當(dāng)前窗口句柄傳給load函數(shù)。Load函數(shù)的主要作用是把音樂文件關(guān)聯(lián)到設(shè)備。關(guān)聯(lián)前會清空上一次播放的設(shè)備,并將音樂路徑傳遞給設(shè)備。然后執(zhí)行play播放函數(shù)。當(dāng)播放文件錯誤時會提示錯誤。c.暫停按鈕:點擊暫停按鈕,執(zhí)行onpause函數(shù),設(shè)備會先獲取按鈕狀態(tài),若顯示“暫?!睍r,執(zhí)行pause函數(shù),返回暫停消息。并改變按鈕狀態(tài)到“恢復(fù)”。如果獲取到按鈕狀態(tài)為“恢復(fù)”時,則執(zhí)行resume函數(shù),并把按鈕狀態(tài)改為“暫?!?。d.停止按鈕:點擊停止按鈕,執(zhí)行onstop函數(shù),首先執(zhí)行stop函數(shù),把所有信息都清除,即終止音樂播
3、放。然后將暫停鍵上的狀態(tài)重置為“暫?!?,并將播放和暫停鍵均置為不可選狀態(tài)。e.上一曲按鈕:點擊后執(zhí)行onupper函數(shù),首先獲取當(dāng)前列表框中選中項的下標(biāo),若下標(biāo)為0,即選中列表框中第一項,則獲得列表框中總項數(shù),然后將最后一項的名稱(路徑名)傳給設(shè)備,然后執(zhí)行播放按鈕的函數(shù),并將列表框選中項選為當(dāng)前播放的音樂文件(選中項下標(biāo)判斷)。f.下一曲按鈕:點擊后執(zhí)行onnext函數(shù)。獲取當(dāng)前選中項的下一項的下標(biāo),當(dāng)為最后一項時,則返回第一項,并把該項的路徑傳遞給設(shè)備,然后只想播放函數(shù),然后將選中項更新為當(dāng)前播放項。g.音量滑塊:滑塊用于音量控制,滑塊被等分為1000,而實際使用時則作為整數(shù)100使用,打
4、開時滑塊默認(rèn)位置是在50,即音量為50,通過滑塊的滑動控制音量的大小,并將結(jié)果顯示在滑塊前的編輯框內(nèi)。h.播放列表:每次添加歌曲時都會添加到播放列表中,列表中有一個參數(shù)和函數(shù),實現(xiàn)在列表框中雙擊歌曲名字能夠播放功能。2.功能說明本軟件只能用于音頻文件的播放,且只支持MP3 WAV WMA三種格式,通過手動添加歌曲,且每次只能添加一首歌曲,添加后不能直接播放,需要點擊播放按鈕或者雙擊播放列表中的歌曲名字。當(dāng)播放列表中有大于一首歌時,點擊上一曲/下一曲能夠快捷切換播放歌曲,點擊后會直接播放,直接在播放列表中雙擊某首歌曲的名字也會直接播放。點擊停止后,播放、暫停鍵均變?yōu)椴豢蛇x狀態(tài),并且把暫停鍵重置為
5、暫停。軟件通過滑動塊控制聲音,默認(rèn)初始為50(滿音量為100),當(dāng)滑動滑塊時會在前面的編輯框中顯示音量數(shù)值。三、 分模塊介紹本程序主要分為添加歌曲、播放控制、列表控制三個模塊。1.添加歌曲即調(diào)用Onfilechoice函數(shù),打開一個窗口,手動添加一首歌曲,將歌曲的路徑關(guān)聯(lián)到設(shè)備,為播放功能提供對象。2.播放控制分為播放、暫停、恢復(fù)、停止、上/下一曲、音量控制子功能。播放及調(diào)用Onplay函數(shù),每次播放都是從0開始,返回消息MCI_PLAY。每次點擊播放都會從頭播放,當(dāng)正在播放某首歌曲時點擊播放也會從頭播放,這也是一個問題。暫停及調(diào)用Onpause函數(shù),返回消息MCI_PAUSE,并把暫停鍵標(biāo)題
6、改為恢復(fù),以便執(zhí)行恢復(fù)功能?;謴?fù)即暫停后的繼續(xù)播放,執(zhí)行resume函數(shù),點擊后會將恢復(fù)重置為暫停。停止即停止所播放歌曲,執(zhí)行Onstop函數(shù),然后將暫?;蛘呋謴?fù)標(biāo)題重置為暫停,并把播放和暫停鍵均置為不可選狀態(tài)。當(dāng)播放列表中大于一首歌時可以使用按鈕上/下一曲快捷切歌,且點擊后不用點擊播放而是直接播放,并將列表框中的光標(biāo)標(biāo)記到當(dāng)前播放歌曲的位置。如果在添加第一首歌后沒有在列表框中雙擊播放而是直接點擊播放按鈕,列表框中的光標(biāo)沒有選中當(dāng)前播放歌曲,這時點擊下一曲時并不會換歌曲,而是把光標(biāo)置為當(dāng)前播放位置。音量通過滑塊控制,將滑塊分為1000份,對應(yīng)響應(yīng)的音量大小,而實際調(diào)節(jié)時則將滑塊的調(diào)節(jié)范圍除以1
7、0,使之更易調(diào)節(jié)?;瑝K默認(rèn)在50,即相對應(yīng)音量為50。在調(diào)節(jié)音量的同時,相對應(yīng)音量大小的數(shù)值則顯示在前面的編輯框中,使調(diào)節(jié)更人性化。3.列表控制即列表框內(nèi)的控制。列表框中有一個參數(shù)m_list,并有一個函數(shù)OnDblclkList1實現(xiàn)對列表框中歌曲雙擊能夠播放功能。列表框中光標(biāo)位置還能為上一曲/下一曲功能提供位置標(biāo)記。另外背景圖片是通過添加位圖實現(xiàn)的,但有部分失真。四、 各模塊源程序及注釋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.其他關(guān)鍵代碼:void Load(HWND hWnd,
9、CString strFilepath) m_hWnd=hWnd; mciSendCommand(DeviceID,MCI_CLOSE,0,0);/在加載文件前先清空上一次3.播放的設(shè)備 mciopenparms.lpstrElementName=strFilepath;/將音樂文件路徑傳給設(shè)備 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;/打開文件成功就關(guān)聯(lián)文件到設(shè)備void play() /播放函數(shù) 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()/暫停函數(shù) mciSendCommand(DeviceID,MCI_PAUSE,0,0);/返回暫定消息MCI_PAUSEvoid resume()/恢復(fù)函數(shù) mciSendCommand(DeviceID,MCI_RESUME,0,0);/返回消息MCI_RESUMEvoid
12、 stop()/停止函數(shù) mciSendCommand(DeviceID,MCI_STOP,0,0); mciSendCommand(DeviceID,MCI_CLOSE,0,0);/當(dāng)點擊停止按鈕時,將所有的信息都清除掉DWORD setvolume(DWORD vol) MCI_DGV_SETAUDIO_PARMS setvolume;/這是設(shè)置音量的參數(shù)數(shù)據(jù)結(jié)構(gòu) setvolume.dwCallback=NULL; setvolume.dwItem=MCI_DGV_SETAUDIO_VOLUME;/動作是設(shè)置音量 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);/獲取按鈕狀態(tài) if(strtem
17、p.Compare("暫停")=0)/ TODO: Add your control notification handler code here pause();/執(zhí)行暫停函數(shù) SetDlgItemText(IDC_pause,"恢復(fù)");/將按鈕置為恢復(fù) if(strtemp.Compare("恢復(fù)")=0) resume(); SetDlgItemText(IDC_pause,"暫停"); 7.停止:void CMyDlg:Onstop() stop();/執(zhí)行停止函數(shù) SetDlgItemText(IDC_
18、pause,"暫停");/將暫?;蛘呋謴?fù)重置為暫停 GetDlgItem(IDC_play)->EnableWindow(false);/當(dāng)stop按鈕按下時,播放和暫停應(yīng)該均不可用 GetDlgItem(IDC_pause)->EnableWindow(false);/ TODO: Add your control notification handler code here8.上一曲:void CMyDlg:Onupper() CString str; Int index=m_list.GetCurSel(); /獲得當(dāng)前在列表框中所選項的下標(biāo) if(ind
19、ex=0) index=m_list.GetCount(); /如果下標(biāo)為0表明為第一項,則將獲得列表框中總項數(shù) m_list.GetText(index-1,str); mciopenparms.lpstrElementName=str;/將音樂文件路徑傳給設(shè)備 Load(this->m_hWnd,str);/以當(dāng)前句柄和音樂文件路徑為參數(shù)執(zhí)行函數(shù) play(); m_list.SetCurSel(index-1);/將下標(biāo)置為上一項,即選中所播放的音樂 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;/光標(biāo)加一 if(index>=m_list.GetCount() index=0;/如果播放完最后一曲就自動播放第一首 m_list.GetText(index,str);/獲得當(dāng)前光標(biāo)所指的路徑字符串 mciopenparms.lpstrElementName=str;/將音樂文件路徑傳給設(shè)備 Load(this->m_hWnd,str); play()
21、; m_list.SetCurSel(index);/自動置光標(biāo) 10.音量控制:void CMyDlg:OnCustomdrawSlider(NMHDR* pNMHDR, LRESULT* pResult) UpdateData(true); m_int=m_slider.GetPos()/10;/將滑塊的值除以10后賦給編輯框的參數(shù) setvolume(m_slider.GetPos();/調(diào)節(jié)聲音 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();/獲取選擇的行數(shù) m_list.GetText(index,str); mciopenparms.lpstrElementName=str;/將音樂文件路徑傳給設(shè)備 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.音量調(diào)節(jié)及上/下曲界面7.出錯界面六、
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 二零二五年度解除互聯(lián)網(wǎng)廣告合作合同
- 施工現(xiàn)場卸料風(fēng)險點告知卡
- 職場技能提升的家庭作業(yè)實踐案例
- 家庭健康教育從理論到實踐的探索
- 科技展會中的人工智能與用戶體驗研究報告
- 二手房銷售合同樣本大全
- 臨時倉儲設(shè)備租賃合同2025
- 二手房買賣合同補(bǔ)充協(xié)議書范本
- 產(chǎn)品銷售獨家代理合同樣本
- 中介代理辦公租賃合同
- 2025年方大萍安鋼鐵招聘筆試參考題庫含答案解析
- 《高原紅細(xì)胞增多癥血液稀釋療法護(hù)理操作規(guī)程》
- 2025年電力工程施工企業(yè)發(fā)展戰(zhàn)略和經(jīng)營計劃
- 年終抖音運營述職報告
- 汽車維修店加盟協(xié)議書細(xì)則
- AQ6111-2023個體防護(hù)裝備安全管理規(guī)范
- 2023年高一物理期末考試卷(人教版)
- 2023版押品考試題庫必考點含答案
- 空氣能熱泵安裝示意圖
- 最新《工會基礎(chǔ)知識》試題庫及答案1000題【完美打印版】
- 辦公家具項目實施方案、供貨方案
評論
0/150
提交評論