用MFC寫簡單的音樂播放器_第1頁
用MFC寫簡單的音樂播放器_第2頁
用MFC寫簡單的音樂播放器_第3頁
用MFC寫簡單的音樂播放器_第4頁
用MFC寫簡單的音樂播放器_第5頁
已閱讀5頁,還剩11頁未讀 繼續免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

多媒體技術論文題目名稱:基于MFC的多媒體播放器的設計與實現學院:專業班級:計算機學院學院:專業班級:計算機學院計算機科學與技術四班學號:姓名:指導教師:完成日期:2016年6月29日目錄TOC\o"1-5"\h\z.摘要 3.關鍵字 3\o"CurrentDocument".開發工具的介紹 3\o"CurrentDocument".基本功能的實現 3\o"CurrentDocument".設計思路 4\o"CurrentDocument".軟件設計 5.結果展示 15\o"CurrentDocument".心得體會 16基于MFC的多媒體播放器的設計與實現計科四班羅前指導老師王勇智摘要:多媒體技術是現在信息技術領域發展的很迅速的一個技術,它的發展方向也很廣泛,我們的生活幾乎離不開多媒體,所以我設計了一個小程序,基于MFC的多媒體播放器的設計與實現,我認為這個小程序比較實用而且并不是很復雜,而且可以通過它來進入多媒體的這道大門,進行更加深入的學習。關鍵字:MFC多媒體關鍵字:MFC多媒體MediaplayerActiveX開發工具的介紹:VisualC++是Microsoft公司在1998年推出的基于Windows9X和WindowNT的優秀集成開發環境。該環境為用戶提供了良好的可視化編程環境,程序員可以利用該開發環境輕松地訪問C++源代碼的編輯器,資源編輯器和使用內部調試器,并且可以創建項目文件。VisualC++不僅包括編譯器,而且它還包括許多的有用的組件,通過這些組建的協同工作,可以在VisualC++6.0集成環境中完成創建源文件,編輯資源,以及對源程序的編譯,連接和調試等各項工作。MFC(MicrosoftFoundationClass)是用來編寫Windows應用程序的C++類集,其中封裝了大部分WindowsAPI函數和Windows控件,使用MFC類庫和VisualC++提供的高度可視的應用程序開發工具,可使應用程序開發變得簡單,提高代碼的可靠性和可重用性。隨著播放器性能的極大提高,程序中經常要播放一些音頻,如果能夠簡單的插入一些音頻并播放,將極大的縮短程序開發時間。本文就是基于MFC在VisualC++環境中利用windowsmediaplayer控件實現音頻文件的播放。ActiveX控件是基于COM的可重用組件,主要用于插入ActiveX控件包容器或Web頁,ActiveX在外觀上和使用上和普通控件一樣,還提供屬性頁以支持在包容器的設計階段對ActiveX控件的屬性進行可視化設計。基本功能的實現:這個播放器具有打開文件,播放,暫停,停止,全屏,退出,音量控制,上一曲,下一曲,快進,快退,靜音等基本播放功能,并可以播放MP3,avi,等格式的多媒體文件。同時還具有播放列表,并且可以在播放模式中選擇順序播放,循環播放,單曲播放三種方式。設計思路:該播放器分為十個模塊,根據ActiveMovie控件實現他們各自相應的功能。打開模塊:打開目標文件。進度模塊:顯示目標狀態。快進退模塊:調節播放的快進和快退。播放模塊:播放音頻文件。暫停模塊:暫停正在播放的音頻文件。停止模塊:結束當前正在播放的文件,但是播放器并不退出。全屏模塊:實現文件的全屏播放。退出模塊:關閉該播放器。循環模塊:實現播放列表中的全部文件的單曲、隨機或順序循環播放。音量模塊:調節文件播放的音量大小和靜音。使用VC++6.0的AppWizard、ClassWizard和其中的各種控件可以方便地建立各種應用程序。但是想要實現更高級更復雜的功能,就要借助豐富的ActiveX控件資源。本實驗計劃使用VC++6.0自帶的一個ActiveX控件ActiveMovieControlObject,來設計多媒體播放器。此多媒體具有一般的播放功能,能播放:*.mp3,*.wma,*.mdi,*.wav,*.avi,*.dat等文件,還有Repeat功能。軟件設計:設計步驟:1、首先我們要注冊控件:在windows“運行”里寫入:regsvr32msdxm.ocx然后單擊確定。只有注冊了控件,后面的實驗才能順利的做下去。2、然后打開VisualC++6.0,在Projects下選擇MFCAppWizard(exe),并取名MediaPlayer,然后建立基于對話框的應用程序。bIJ利中百拄工在文件口中吉林工造僵bIJ利中百拄工在文件口中吉林工造僵X.SQL匚口尻"門外/MFC應用相后疸.二-毋騾1俎51目工鼻MFC應用相后疸.二-毋騾1您要創建的應用程序類型是:「單文檔阿廣多?:文檔|網行基本對話框(口】"文檔r查看體系結構支持M您的資源使用的語言是:I中文陶體,巾閏||APPWZCHS,DLL|《上一步 下一步, 完版X在文件E中查找入潔果工mLDcbuFEinM/ ,J\MFC應用隹序向號-步簟2共4步 7XEditik9C?Btr-ol:|Rcc?r<4WCi><E.kD-ffk巧R?di。I匕Ki4ia您是否赭望包含:

用.'關產前話框

r上下文相關幫助

7Editik9C?Btr-ol:|Rcc?r<4WCi><E.kD-ffk巧R?di。I匕Ki4ia《上一步I不一步.I完成I_取常X在文件工中查找X結果又飛成gbu最皿/ [IaJJ圖6圖7MFCAppWizard生成的對話框3、打開ResourceView,選擇其中的對話框,打開其中的主對話框,去掉對話框上的“確定”按鈕,保留“取消”,將Caption改為“退出”。然后再在上面加上幾個按鈕,ID和Caption分別為IDC_OPEN,打開;IDC_PLAY播放;IDC_PAUSE,暫停;IDC_STOP,停止;IDC_CLOSE,退出;IDC_LOWER,一;IDC_UPPER,+;IDC_FULLSCREEN,全屏;IDC_ABOUT,關于;IDC_LAST,上一曲;IDC_NEXT,下一曲;IDC_FORWARD快進;IDC_REVERSE,快退;最終如圖8所示。圖8播放器功能界面4、力口入ActiveMovieControl控件。打開工程>增加口到工程->ComponentsandControls->RegisteredActiveXControls對話框,選擇其中的ActiveMovieControlObject,Insert,OK之后,會發現控件面板上多了一項ActiveMovieControlObject,將它選中,直接放在對話框上,并拖成合適大小。最終效果如圖10所示。SSMJfiALU工程⑥置建?工具由君口的??(HJ受力網工程聞W百活竟二卷凹受力網工程聞|AIIcl哈?—— Sfldr?C&rtrfllSirFDSDIllIWOUTB-MEDIAPI從愚惶..,設置⑤導出SirFDSDIllIWOUTB-MEDIAPI從愚惶..,設置⑤導出(W作文件…?后文件回-岫+F7 蝴舊ComgonentE-andCo睢rob…逮人工的L工作至閏山…oFiwnO*-^Slidtr1(HMIIDR>pHNHDR,LRESULible//IODO:AddyourcontrolrotlFicetlvnnjfiaiertQdchere圖10圖10圖10最終界面效果5、為ActiveMovieControl控件設置變量m_ActiveMovie。點中它,按Ctrl+W打開ClassWizard為它添加變量m_ActiveMovie。MFCCla?Wizard 7X圖12為ActiveMovieControl控件設置變量m_ActiveMovie6、為程序添加消息處理函數。打開ClassWizard,為各個按鈕加入消息處理函數。在MediaPlayerDlg.cpp文件里為各消息處理函數添加代碼,部分代碼如下:打開文件:voidCMediaPlayerDlg::OnOpen()(//TODO:Addyourcontrolnotificationhandlercodeherem_listCtrl.SetFocus();CStringstr;TCHARszFilter[]=_T("Mp3File(*.mp3)|*.mp3WmaFile(*.wma)|*.wma|VideoFile(*.dat)|*.dat|WaveFile(*.wav)|*.wav|AVIFile(*.avi)|*.avi|MovieFile(*.mov)|*.mov|MediaFile(*.mmm)|*.mmm|MidFile(*.mid;*,rmi)|*.mid;*.rmi|MPEGFile(*.mpeg)|*.mpeg|AllFile(*.*)|*.*||");CFileDialogfileDlg(TRUE,NULL,NULL,OFN_HIDEREADONLY|OFN_OVERWRITEPROMPT,szFilter,this);CStringstrFilePath;if(IDOK==fileDlg.DoModal())(strFilePath=fileDlg.GetPathName();strFilePath.MakeUpper();m_player.SetUrl(strFilePath);m_media=static_cast<CWMPMedia>(m_player.newMedia(strFilePath));m_list.appendItem(m_media);m_listCtrl.InsertItem(count,m_media.GetName());m_listCtrl.SetItemText(count,1,_T(m_media.getItemInfo("FileType")));m_listCtrl.SetItemText(count,2,_T(m_media.GetDurationString()));m_listCtrl.SetItemText(count,3,_T(strFilePath));m_listCtrl.SetItemText(count++,4,_T(m_media.getItemInfo("Duration")));POSITIONpos;pos=m_listCtrl.GetFirstSelectedItemPosition();10IndexInFieldList=m_listCtrl.GetNextSelectedItem(pos);m_listCtrl.SetItemState(IndexInFieldList,?LVIS_SELECTED,LVIS_SELECTED);m_player.SetUrl(m_listCtrl.GetItemText(0,3));m_listCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED);))播放:voidCMediaPlayerDlg::OnPlay()(//TODO:Addyourcontrolnotificationhandlercodehereif(m_list.GetCount()<=0)MessageBox("列表無文件!","Warning",MB_OK);KillTimer(0);m_control.play();if(m_control.GetCurrentPosition()==0)m_control.SetCurrentPosition(0.01);SetTimer(0,20,NULL);)暫停:voidCMediaPlayerDlg::OnPause()(//TODO:Addyourcontrolnotificationhandlercodeherem_control.pause();)停止:voidCMediaPlayerDlg::OnStop()(//TODO:AddyourcontrolnotificationhandlercodehereKillTimer(0);m_control.stop();)全屏:voidCMediaPlayerDlg::OnFullscreen()(//TODO:Addyourcontrolnotificationhandlercodehereif(!m_player.GetFullScreen())(m_control.pause();AfxMessageBox("請雙擊退出全屏模式!!");m_player.SetFullScreen(true);m_control.play();11)退出:voidCMediaPlayerDlg::OnExit()(//TODO:AddyourcontrolnotificationhandlercodehereSendMessage(WM_CLOSE);)上一曲:voidCMediaPlayerDlg::OnLast()(//TODO:Addyourcontrolnotificationhandlercodeherem_listCtrl.SetFocus();POSITIONpos;CStringstrName;UINTflag1=LVIS_SELECTED|LVIS_FOCUSED;pos=m_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList=m_listCtrl.GetNextSelectedItem(pos);if(IndexInFieldList==-1)(AfxMessageBox("列表內沒有被選中項!");return;)if(IndexInFieldList==0)(AfxMessageBox("已經到了列表頭部!");m_listCtrl.SetItemState(IndexInFieldList,flag1,flag1);return;)m_listCtrl.SetItemState(IndexInFieldList,?LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList-1,flag1,flag1);strName=m_listCtrl.GetItemText(IndexInFieldList-1,3);KillTimer(0);m_control.stop();m_player.SetUrl(strName);m_control.SetCurrentPosition(0.01);m_control.play();SetTimer(0,20,NULL);)下一曲:voidCMediaPlayerDlg::OnNext()(//TODO:Addyourcontrolnotificationhandlercodeherem_listCtrl.SetFocus();POSITIONpos;CStringstrName;UINTflag1=LVIS_SELECTED|LVIS_FOCUSED;pos=m_listCtrl.GetFirstSelectedItemPosition();12IndexInFieldList=m_listCtrl.GetNextSelectedItem(pos);if(IndexInFieldList==-1)(AfxMessageBox("列表內沒有被選中項!");return;)if(IndexInFieldList==m_listCtrl.GetItemCount()-1)(AfxMessageBox("已經到了列表末尾!");m_listCtrl.SetItemState(IndexInFieldList,flag1,flag1);return;)m_listCtrl.SetItemState(IndexInFieldList,?LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList+1,flag1,flag1);strName=m_listCtrl.GetItemText(IndexInFieldList+1,3);KillTimer(0);m_control.stop();m_player.SetUrl(strName);m_control.SetCurrentPosition(0.01);m_control.play();SetTimer(0,20,NULL);)快進:voidCMediaPlayerDlg::OnForward()(//TODO:Addyourcontrolnotificationhandlercodeheredoublet=m_control.GetCurrentPosition();m_control.SetCurrentPosition(t=t+10);)快退:voidCMediaPlayerDlg::OnReverse()(//TODO:Addyourcontrolnotificationhandlercodeheredoublet=m_control.GetCurrentPosition();m_control.SetCurrentPosition(t=t-10);)靜音:voidCMediaPlayerDlg::OnSilence()(//TODO:Addyourcontrolnotificationhandlercodehereif(!m_setting.GetMute())m_setting.SetMute(true);elsem_setting.SetMute(false);13音量加減:voidCMediaPlayerDlg::OnAdd()(//TODO:Addyourcontrolnotificationhandlercodeherem_setting.SetVOlume(m_setting.GetVOlume()+10);m_VOLUME.SetPos(m_setting.GetWlume());)voidCMediaPlayerDlg::OnSub()(//TODO:AddyourcontrolnotificationhandlercodehereintVolume=m_setting.GetVolume();m_setting.SetVolume(Volume=Volume-10);m_VOLUME.SetPos(m_setting.GetVolume());)列表:voidCMediaPlayerDlg::OnClickList1(NMHDR*pNMHDR,LRESULT*pResult)(//TODO:AddyourcontrolnotificationhandlercodehereLPNMITEMACTIVATE pNMItemActivatereinterpret_cast<LPNMITEMACTIVATE>(pNMHDR);//TODO:AddyourcontrolnotificationhandlercodehereNMLISTVIEW*pNMListView=(NMLISTVIEW*)pNMHDR;*pResult=0;CStringstrName;if(-1!=pNMListView->iItem)(strName=m_listCtrl.GetItemText(pNMListView->iItem,3);KillTimer(0);m_control.stop();m_player.SetUrl(strName);m_control.SetCurrentPosition(0.01);m_control.play();SetTimer(0,20,NULL);))另外函數OnTimer()是通過ClassWizard(Ctrl+W)來添加的:圖13voidCVedioPlayerDlg::OnTimer(UINTnIDEvent)(doubleCurr

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論