多媒體視頻播放器_第1頁
多媒體視頻播放器_第2頁
多媒體視頻播放器_第3頁
多媒體視頻播放器_第4頁
多媒體視頻播放器_第5頁
已閱讀5頁,還剩17頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)

文檔簡介

./目錄TOC\o"1-3"\h\u多媒體視頻播放器11基本功能描述12設(shè)計思路13軟件設(shè)計23.1設(shè)計步驟33.2界面設(shè)計63.3關(guān)鍵功能的實現(xiàn)93.3.1"打開"功能的實現(xiàn)93.3.2"播放"、"暫停"、"停止""全屏"功能的實現(xiàn)103.3.3"上一首"和"下一首"功能實現(xiàn)123.3.4音量滑動條功能的實現(xiàn)123.3.5播放列表功能的實現(xiàn)14進度滑動條功能的實現(xiàn)154結(jié)論與心得體會165參考文獻176思考題187附錄187.1調(diào)試報告187.1.1調(diào)試一187.1.2調(diào)試二197.2測試結(jié)果207.3關(guān)鍵源代碼21.多媒體視頻播放器1基本功能描述多媒體視頻播放工具是目前計算機必備的一個軟件,比較流行的有RealPlayer、WindowsMediaPlayer以及國產(chǎn)暴風(fēng)影音等,能夠播放RM、RMVB、MP3、MPEG、DAT等多種格式的視頻文件mp3、wma、mdi、wav、avi、dat等格式的音頻文件。用VC++軟件設(shè)計并編寫出一個多媒體視頻播放器。在設(shè)計期間,可以選擇使用的多媒體控件,制作與用戶交互性較好的應(yīng)用程序界面。對于控件有多種,可以自己選擇。本次課程設(shè)計要使用VC++6.0部的ActiveX控件——WindowsMediaPlayer控件,建立自己的多媒體播放器。此多媒體播放器具有打開文件、播放、暫停、停止、關(guān)閉、全屏、音量滑塊調(diào)節(jié)、進度滑塊調(diào)節(jié)、快進、快退、顯示隱藏播放列表等基本功能,可以播放*.mp3、*.wma、*.mdi、*.wav、*.avi、*.dat、*.mpg、*.rmvb等格式的多媒體文件。同時還具有自制的播放列表,可以按照列表上的順序進行一曲、下一曲的播放。2設(shè)計思路WindowsMediaPlayer是一款Windows系統(tǒng)自帶的播放器,支持通過插件增強功能。其控件作為本次課設(shè)的媒體控件可以滿足要求。并且該控件是微軟自帶的免費控件,通常每個電腦都應(yīng)有這個控件,方便設(shè)計出來的軟件在各個電腦運行。根據(jù)WindowsMediaPlayer和各個按鈕控件功能的特點,首先要在初始化中對CWMPControl,CWMPSettings,CWMPPlaylist,CWMPMedia等類的對象進行綁定和定義。播放器的一些基本的功能如播放、暫停、全屏、靜音、快進、快退等主要是調(diào)用CWMPControl和CWMPPlayer類中的成員函數(shù)來進行實現(xiàn)。對于打開按鈕,需要調(diào)用通用文件對話框類,調(diào)用szFileFilter<>文件過濾函數(shù)和GetFileName<>獲取文件名函數(shù)。除了以上提到的功能的實現(xiàn),還有進度滑條Slider_progress和音量滑動條Slider2是通過對CSliderCtrl類實現(xiàn)的。音量滑塊50,新建list音量滑塊50,新建list.txt,計時器開啟打開程序點擊"保存列表"初始化點擊"保存列表"初始化List.txtList.txt點擊"打開"選擇文件顯示在list.txt中點擊"打開"選擇文件顯示在list.txt中刪除列表刪除列表雙擊列表框中內(nèi)容或選中單擊"播放"開始播放雙擊列表框中內(nèi)容或選中單擊"播放"開始播放OnTimer〔音量調(diào)節(jié)點擊"快進"點擊"下一首"點擊"停止"點擊"暫停/繼續(xù)"OnTimer〔音量調(diào)節(jié)點擊"快進"點擊"下一首"點擊"停止"點擊"暫停/繼續(xù)"獲取位置參數(shù)返回響應(yīng)CwnpSetting類中的Setvolume響應(yīng)CwnpControl類中的fastForward函數(shù)獲取當(dāng)前播放位置返回給進度條滑塊的SetPos獲取位置參數(shù)返回響應(yīng)CwnpSetting類中的Setvolume響應(yīng)CwnpControl類中的fastForward函數(shù)獲取當(dāng)前播放位置返回給進度條滑塊的SetPos獲取音量返回SetPosintidex=當(dāng)前光標(biāo)位置加1,讀取idex中文本,返回SetUrl函數(shù)響應(yīng)CwnpControl類中的stop函數(shù)響應(yīng)CwnpControl類中的pause函數(shù)和play函數(shù)圖1 視頻播放器流程圖3軟件設(shè)計設(shè)計平臺可以是Win32的操作平臺上,使用已安裝的VC6.0++進行設(shè)計和調(diào)試。在設(shè)計前要確保平臺中有WMP控件。結(jié)合之前的設(shè)計思路,使用WindowsMediaPlayer等控件來制作多媒體視頻播放器。若是Win64這與VC6.0++不兼容,可以選擇更高的版本。3.1設(shè)計步驟打開VC++6.0,點擊"新建",在"新建"窗口選擇"工程"選項卡。由于程序是基于對話框的MFC應(yīng)用程序使用WindowsMediaPlayer等控件來制作多媒體視頻播放器。設(shè)置好地址位置和工程名后點"確定"。這里的工程名字可以是自己的名字拼音縮寫,也可以沒有任何含義。圖2 "新建"對話框示意圖在點擊"確定"后進入到了"MFC應(yīng)用程序向?qū)А襟E1"的設(shè)置界面,選擇"基本對話框",然后點擊"下一步"。圖3 "MFC應(yīng)用程序向?qū)?示意圖在剩下的3個步驟中,全部選擇默認(rèn)的設(shè)置,不要做隨意更改,直至"完成"便實現(xiàn)了對話框的創(chuàng)建。然后是插入控件,先把系統(tǒng)初始化的按鈕用"Delete"刪除,在單擊鼠標(biāo)右鍵選擇"插入ActiveX控件",在跳出的對話框中選擇"WindowsMediaPlayer"〔一般當(dāng)電腦安裝了WindowsMediaPlayer,其控件也應(yīng)該存在,點擊"確定"。圖4 添加"WindowsMediaPlayer"控件示意圖雖然已經(jīng)插入控件了,但這時的控件還不能使用,因為控件的各種類并沒有一起加入工程類中。右擊鼠標(biāo),選擇"建立類向?qū)А?,這時系統(tǒng)跳出對話框提示是否加入來自控件的類,直接點擊"確定"就可以了。圖5 "WindowsMediaPlayer"控件類添加示意圖接著對控件關(guān)聯(lián)變量,右擊加入的WMP控件,點擊"屬性",把ID改為"IDC_player",然后打開"建立類向?qū)А?點到"MemberVariables"頁面向IDC_player添加變量。單擊"ADDVariables",會彈出圖6所示的"Addmembername"對話框,命名為"m_player",設(shè)為控制"Control"型,點擊"OK"。圖6 變量命名示意圖關(guān)聯(lián)變量之后才算是真正的添加了該控件,可以發(fā)現(xiàn)在關(guān)聯(lián)變量之后,控件工具欄多了"WindowsMediaPlayer"控件的選項,并且在"SourceFiles"中增加了17個類,相應(yīng)的頭文件也增加了17個,其中最主要的類為Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpsettings四個大類。Cwmpplayer4類主要是關(guān)于對其他類的對象的調(diào)用以及基本的控件功能的實現(xiàn),提供了與WindowsMediaPlayer控件進行交互的基本方法,其中部分成員函數(shù)還能夠進一步獲取得到其他相關(guān)類對象的實例;Cwmpcontrols類主要是對控件的更多的操作;Cwmpmedia類主要是對于媒體文件資源的一些操作;Cwmpsettings類主要是對于媒體文件中的一些基本設(shè)置的操作。3.2界面設(shè)計首先是打開按鈕,用于媒體文件的打開;然后依次是播放、暫停、停止、快進、快退、靜音、全屏、退出、上一首、下一首、顯示/隱藏按鈕,以及視頻進度滑塊和音量滑塊條Slider控件。對控件主要進行變量的關(guān)聯(lián),以及ID的修改,對于普通按鈕進行ID修改,結(jié)果如下下表1、表2、表3和表4所示。表1 控件ID以及對應(yīng)響應(yīng)函數(shù)表按鈕ID控件Caption消息響應(yīng)函數(shù)類型IDC_BUTTON_open打開OnBUTTONopen<>命令按鈕IDC_BUTTON_fullscreen全屏OnBUTTONfullscreen<>命令按鈕IDC_BUTTON_play播放OnBUTTONplay<>命令按鈕IDC_BUTTON_panse暫停/播放OnBUTTONpanse<>命令按鈕IDC_BUTTON_stop停止OnBUTTONstop<>命令按鈕IDC_BUTTON_fastforward快進OnBUTTONFastforward<>命令按鈕IDC_BUTTON_fasteverse快退OnBUTTONfasteverse<>命令按鈕IDC_BUTTON_pre上一曲OnBUTTONpre<>命令按鈕IDC_BUTTON_next下一曲OnBUTTONnext<>命令按鈕IDC_BUTTON4_mute靜音OnBUTTON4mute<>命令按鈕IDCANCEL退出無命令按鈕IDC_BUTTON_show隱藏/展開OnBUTTONshow<>命令按鈕IDC_BUTTON_save保存列表OnBUTTONsave<>命令按鈕IDC_BUTTON_clear刪除列表OnBUTTONclear<>命令按鈕然后是加入一些關(guān)聯(lián)變量的控件,之前加入了WMPlayer,還要加入類別為"滑塊"的Slider來當(dāng)調(diào)節(jié)聲音的滑塊,還有加入類別為"列表框"的ListControl來充當(dāng)播放列表。表2 控件ID以及關(guān)聯(lián)變量表按鈕ID控件Caption變量名稱類型IDC_OCX1WMPlayerm_playerCWMPlayer4IDC_SLIDER_progressSliderm_jinduCSliderCtrlIDC_SLIDER_volSliderm_volCSliderCtrlIDC_LIST_MENUListControlm_list2CListBox在按鈕對應(yīng)的消息響應(yīng)函數(shù)中寫程序?qū)⒁玫奖?的變量和WMP控件中的5個類的函數(shù)。在這五個類中:Cwmpplayer4類主要是關(guān)于對其他類的對象的調(diào)用以及基本的控件功能的實現(xiàn),是WMP控件函數(shù)與外部交流的橋梁,不可缺少。寧外其部分成員函數(shù)還能夠進一步獲取得到其他相關(guān)類對象的實例;Cwmpcontrols類主要是對控件的更多的操作,例如播放、暫停;Cwmpmedia類主要是對于媒體文件資源的一些操作,例如獲取路徑和名稱;Cwmpplaylist類主要是關(guān)于播放列表的操作;Cwmpsettings類主要是對于媒體文件中的一些基本設(shè)置的操作。表3 其他類及對應(yīng)對象表類名頭文件名對象名CWMPControlsWmpcontrols.hm_ControlCWMPSettingswmpsettings.hm_SettingCWMPMediawmpmedia.hm_MediaCWMPPlaylistwmpplaylist.hm_Playlist表4 其他數(shù)據(jù)定義數(shù)據(jù)類型變量名數(shù)據(jù)類型變量名CStringm_FileNameBOOLflag,flag2,nCStringm_PathNameintvol除了對各個控件關(guān)聯(lián)變量以及消息響應(yīng)函數(shù),還要對對話框類進行消息響應(yīng)函數(shù)的關(guān)聯(lián),如當(dāng)一首歌播放完后的模式選擇。應(yīng)用到WM_TIMER消息響應(yīng)函數(shù)以及SetTimer<>和KillTimer<>函數(shù),如圖建立OnTimer函數(shù)。圖7 添加"WM_TIMER"消息函數(shù)示意圖還有菜單的設(shè)計,其相對簡單,只要名稱和ID與表1保持一致就可以了。在"ResourceFile"中右擊鼠標(biāo)添加"MENU",屬性為"IDR_MENU1"。但是菜單并未與對話窗口有實質(zhì)聯(lián)系,需要將菜單加入到"IDD_SHIFAN_DIALOG"中來,在"IDD_SHIFAN_DIALOG"窗口空白右鍵單擊,選中菜單"IDR_MENU1",這樣便完成了對菜單的加載。圖8 控件按鈕分布圖編譯運行程序后得到了初步的界面效果圖,當(dāng)然還沒有加入函數(shù)。同時在左上角會顯示自己寫的工程名"YLJ_Media_Player",如圖8所示。3.3關(guān)鍵功能的實現(xiàn)對于各個按鈕、列表功能的實現(xiàn)主要是通過對各個函數(shù)加入相應(yīng)的代碼,下文將列出相應(yīng)的關(guān)鍵代碼。3.3.1"打開"功能的實現(xiàn)"打開"按鈕主要是實現(xiàn)了對打開的文件進行過濾,主要使用了szFileFilter<>函數(shù)。點擊確定時,首先是把文件路徑傳給播放列表中,列表在從文件路徑中提取文件名來顯示。然后又把文件路徑通過SetUrl<>交給控件讀取播放。voidCYLJ_Media_PlayerDlg::OnBUTTONopen<>{ charszFileFilter[]="所有支持類型|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*.mov;*.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|" "Mp3File<*.mp3>|*.mp3|" "Mp4File<*.mp4>|*.mp4|" "WmaFile<*.wma>|*.wma|" "VideoFile<*.dat>|*.dat|" "WaveFile<*.wav>|*.wav|" "AVIFile<*.avi>|*.avi|" "MovieFile<*.mov>|*.mov|" "RmvbFile<*.rmvb>|*.rmvb|" "MediaFile<*.mmm>|*.mmm|" "MidFile<*.mid;*,rmi>|*.mid;*.rmi|" "MPEGFile<*.mpeg>|*.mpeg|" "MPGFile<*.mpg>|*.mpg|""AllFile<*.*>|*.*||";//文件類型過濾 CFileDialogdlg<TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter>; POSITIONpos=dlg.GetStartPosition<>; if<dlg.DoModal<>==IDOK> {while<pos!=NULL>{ m_PathName=dlg.GetNextPathName<pos>; m_list2.AddString<m_PathName>; } }}3.3.2"播放"、"暫停"、"停止""全屏"功能的實現(xiàn)其實和3.3.1中提到一種播放方法一樣使用了SetUrl<>函數(shù)來實現(xiàn)。voidCYLJ_Media_PlayerDlg::OnBUTTONplay<>{CStringstr;intindex=m_list2.GetCurSel<>;m_list2.GetText<index,str>;m_player.SetUrl<str>; }"暫停"和"停止"功能實現(xiàn)方法和播放差不多,只是使用的m_player.GetControls<>中函數(shù)改變了。voidCYLJ_Media_PlayerDlg::OnBUTTONpanse<>{ flag2=!flag2; if<flag2>{m_player.GetControls<>.pause<>; } else{ m_player.GetControls<>.play<>; }}voidCYLJ_Media_PlayerDlg::OnBUTTONstop<>{ m_player.GetControls<>.stop<>;}全屏功能的實現(xiàn)也是調(diào)用SetFullScreen<TRUE>函數(shù)來實現(xiàn)。voidCYLJ_Media_PlayerDlg::OnBUTTONfullscreen<>{ m_player.SetFullScreen<TRUE>;}3.3.3"上一首"和"下一首"功能實現(xiàn)"上一首"就是讓光標(biāo)往上移一行,也就是對應(yīng)的光標(biāo)變量〔index減去1。當(dāng)要判斷光標(biāo)在第一行的情況,也就是index=0的時候,這時光標(biāo)應(yīng)移到最后一首歌曲或視頻上。voidCYLJ_Media_PlayerDlg::OnBUTTONpre<>{ CStringstr; intindex=m_list2.GetCurSel<>-1;//光標(biāo)減一 if<index<0>index=m_list2.GetCount<>-1;//如果播放完第一曲就自動播放最后一首 m_list2.GetText<index,str>;//獲得當(dāng)前光標(biāo)所指的路徑字符串 m_player.SetUrl<str>;//開始播放上一首 m_list2.SetCurSel<index>;//自動置光標(biāo)}其"下一首"和"上一首"小異,只不過index應(yīng)加1,在光標(biāo)為最后一行時應(yīng)判斷移動到第一行。voidCYLJ_Media_PlayerDlg::OnBUTTONnext<>{ CStringstr; intindex=m_list2.GetCurSel<>+1;//光標(biāo)加一 if<index>=m_list2.GetCount<>>index=0;//如果播放完最后一曲就自動播放第一首 m_list2.GetText<index,str>;//獲得當(dāng)前光標(biāo)所指的路徑字符串 m_player.SetUrl<str>;//開始播放下一首 m_list2.SetCurSel<index>;//自動置光標(biāo)}3.3.4音量滑動條功能的實現(xiàn)音量滑動條是區(qū)別于其他命令按鈕的,它是滑塊,是調(diào)用CSliderCtrl控件的m_vol變量來實現(xiàn)的。音量調(diào)節(jié)函數(shù)主要是使用一個嵌套函數(shù)"m_player.GetSettings<>.SetVolume<100-m_vol.GetPos<>>;"實現(xiàn)的。設(shè)置音量用的是"SetVolume<>"函數(shù)。在"OnInitDialog<>"函數(shù)中已對滑塊圍進行初始化——CSliderCtrl*pSlide1=<CSliderCtrl*>GetDlgItem<IDC_SLIDER1>;pSlide1->SetRange<0,100>;使音量變化圍為0~100。voidCYLJ_Media_PlayerDlg::OnReleasedcaptureSlider1<NMHDR*pNMHDR,LRESULT*pResult>{ m_player.GetSettings<>.SetVolume<100-m_vol.GetPos<>>; *pResult=0;}另外靜音程序如下,在靜音按鈕按下后把系統(tǒng)音量保存在vol中,等恢復(fù)時使用,再設(shè)置為靜音,再次按下后取消靜音然后恢復(fù)開始音量。voidCYLJ_Media_PlayerDlg::OnBUTTON4mute<>{ n=!n; if<n> { vol=m_player.GetSettings<>.GetVolume<>;//獲取當(dāng)前音量值 m_player.GetSettings<>.SetMute<TRUE>;//設(shè)為靜音 } else { m_player.GetSettings<>.SetMute<FALSE>;//解除靜音 m_player.GetSettings<>.SetVolume<vol>;//恢復(fù)當(dāng)前音量值 }}3.3.5播放列表功能的實現(xiàn)播放列表主要有"隱藏/展開"、"保存列表"、"清空列表"這三個功能。這個列表的三個功能實現(xiàn)前提第一次運行程序時會在E盤新建一個txt文檔并命名為"list.txt"。初始化函數(shù)如下:CStdioFile*fsp=newCStdioFile<"E:\\list.txt",CFile::modeRead>; CStringstr; while<fsp->ReadString<str>> { m_list2.AddString<str>; } fsp->Close<>; deletefsp;文檔可以保存播放文件列表使在下次打開時可自動的生成播放列表。下面是"保存列表"的函數(shù)。voidCYLJ_Media_PlayerDlg::OnBUTTONsave<>{ //TODO:Addyourcontrolnotificationhandlercodehere CStdioFilefile; CStringstrtemp; file.Open<"E:\\list.txt",CFile::modeCreate|CFile::modeReadWrite|CFile::typeText>;for<inti=0;i<m_list2.GetCount<>;i++> { CStringstrtemp; m_list2.GetText<i,strtemp>; strtemp+="\n";//換行 file.WriteString<strtemp>; } file.Close<>;}然后是"清除列表"功能,用"ResetContent<>"直接清除列表。voidCYLJ_Media_PlayerDlg::OnBUTTONclear<>{ CStdioFilefile; m_list2.ResetContent<>; file.Open<"E:\\list.txt",CFile::modeCreate>;file.Close<>;}最后是"顯示/隱藏"功能,其實就是在重新設(shè)置窗口大小,若展開則恢復(fù)原來的窗口大小,這里使用了SetWindowPos<>函數(shù)。voidCYLJ_Media_PlayerDlg::OnBUTTONshow<>{ flag=!flag; if<flag>SetWindowPos<NULL,0,0,500,520,SWP_NOMOVE>; elseSetWindowPos<NULL,0,0,702,520,SWP_NOMOVE>;}進度滑動條功能的實現(xiàn)進度條可以時時顯示播放的位置,而視頻進度滑塊的初始化放在OnHScroll<>函數(shù)中實現(xiàn)。voidCYLJ_Media_PlayerDlg::OnHScroll<UINTnSBCode,UINTnPos,CScrollBar*pScrollBar>{ intm_time; m_time=<int>m_player.GetCurrentMedia<>.GetDuration<>; m_jindu.SetRange<0,m_time>;//初始化視頻進度滑塊 intNewPos; if<<CSliderCtrl*>pScrollBar==&m_jindu> { switch<nSBCode> { caseSB_THUMBTRACK: m_jindu.SetPos<nPos>; m_player.GetControls<>.SetCurrentPosition<<double>nPos>; break; caseSB_PAGEDOWN: NewPos=m_jindu.GetPos<>; m_player.GetControls<>.SetCurrentPosition<<double>NewPos>; break; caseSB_PAGEUP: NewPos=m_jindu.GetPos<>; m_player.GetControls<>.SetCurrentPosition<<double>NewPos>; break; } }視頻進度的控制主要是SB_THUMBTRACK、SB_PAGEDOWN、SB_PAGEUP,三個消息響應(yīng)即移動滑塊、單擊滑塊右邊滑條、單擊滑塊左邊滑條的消息響應(yīng)來實現(xiàn)視頻進度的控制。4結(jié)論與心得體會平時我挺喜歡聽歌看電影的,當(dāng)看到老師給的選題中有多媒體視頻播放器這個題目,我開始是還是挺激動的,能夠自己做一個簡單的程序,滿足自己的愛好也是挺有成就感的。在一開始選這個課題時,我和其他同學(xué)都覺得很難。不像簡單計算器和畫圖軟件等課題曾在上課提到過,對于多媒體播放器我看到看到了題目不知道該怎樣做。然后我花了大量時間去了解第一步怎么做,分別查找了各個控件基本用法功能,最后選用了WindowsMediaPlayer控件,因為我vc中只能找到這個與視頻有關(guān)的控件,于是在網(wǎng)上查了一些關(guān)于WindowsMediaPlayer控件的資料,結(jié)果按照網(wǎng)上說的方法來根本無法實現(xiàn),因為網(wǎng)上都說要先插入17個WindowsMediaPlayer控件相關(guān)的類,但是我vc卻不照網(wǎng)上那樣實現(xiàn),所以在頭兩天是在摸索中,耗費了很多時間,最后我先不管第一步,直接插入控件,然后發(fā)現(xiàn)關(guān)聯(lián)變量時會有提示要插入17個類,點確定就行,問題就這么解決了。然后我和同組的同學(xué)在網(wǎng)上找相應(yīng)的資料,找到怎樣在VC++6.0里加入控件,各個控件的說明書。進過比較和分析,我們一致采用WindowsMediaPlayer多媒體軟件旗下的控件WMP控件。因為WMP控件本身就是微軟自帶的控件,不存在兼容問題。還有每個電腦多都有WindowsMediaPlayer播放器,其控件也都注冊了。知道怎樣使用WMP控件,就可以很輕松地完成軟件流程圖的設(shè)計。我結(jié)合了自己在網(wǎng)上搜索的資料,做好了整個多媒體播放器的整體設(shè)計,確定了軟件的框架、主要構(gòu)件以及構(gòu)件之間的關(guān)聯(lián),而后由總體設(shè)計逐漸深入完成軟件的詳細設(shè)計和開發(fā)過程。編寫代碼更加有條理,才會更加符合軟件工程的標(biāo)準(zhǔn)。整個程序設(shè)計我做了兩天,每天熬夜到1點多,也學(xué)會了不少東西。最后終于變好了,編寫的軟件可以滿足課程設(shè)計給出的要求。系統(tǒng)能選擇打開、播放、暫停、停止音頻文件和視頻文件,并能控制聲音的大小,可以播放*.mp3、*.wma、*.mdi、*.wav、*avi、*dat等格式的多媒體文件??吹近c擊每一個按鈕都能有相應(yīng)的反應(yīng),頓時有了一種莫名的成就感,也感覺到自己的汗水得到了回報。紙上得來終覺淺,絕知此事要躬行。要想完成一項作品,并不是想的那樣簡單,做起來總是會遇到問題的,這時就需要要解決問題的能力和堅持不懈的決心。通過本次試驗,我收獲了很多,對面向?qū)ο蟪绦蛟O(shè)計這門課所學(xué)的知識有了更好的理解。書山有路勤為徑,學(xué)海無涯苦作舟。5參考文獻[1]揣錦華.面向?qū)ο蟪绦蛟O(shè)計與VC++實踐[M].電子科技大學(xué).2005[2]阿奇.VisualC++教程[M].:機械工業(yè).2004[3]周長發(fā).VisualC++.NET多媒體編程[M].電子工業(yè).2002[4]SteveMack.流媒體寶典.電子工業(yè).2003[5]王育堅.VisualC++面向?qū)ο缶幊探坛?第2版.:清華大學(xué),20086思考題控件自帶的類和本程序中的類是如何共同作用的?答:控件自帶的的類肯定會在對話框的主程序中被調(diào)用,那么就要在主程序中#include入對應(yīng)類的頭文件。對需要用到的類生成對應(yīng)的對象以實現(xiàn)類中函數(shù)的使用。調(diào)用了控件類中的函數(shù)后,還需要調(diào)用對話框自身的函數(shù),比如消息及消息響應(yīng)函數(shù)等函數(shù),以及各控件對應(yīng)的消息響應(yīng)函數(shù)。如此便可以實現(xiàn)控件自帶類和本程序中的類的共同作用。說明程序中調(diào)用的控件函數(shù)的作用?答:控件的不同類有不同的函數(shù)與之對應(yīng),不同函數(shù)有不同的功能。其函數(shù)功能見表。表5 控件函數(shù)和對應(yīng)的功能功能控件函數(shù)功能控件函數(shù)打開OnBUTTONopen<>進度刷新OnTimer<>播放OnBUTTONplay<>停止OnBUTTONstop<>暫停OnBUTTONpause<>上一首OnBUTTONpre<>快進OnBUTTONFastforward下一首OnBUTTONnext<>快退OnBUTTONFastreverse<>保存列表OnBUTTONsave<>聲音滑塊OnReleasedcaptureSlider1<>清空列表OnBUTTONclear<>全屏OnBUTTONfullscreen<>進度控制OnHScroll〔7附錄7.1調(diào)試報告7.1.1調(diào)試一運行時錯誤指明如下如圖所示:圖9調(diào)試一錯誤提示錯誤提示為:useofundefinedtype'CWMPControls'。在這行代碼中,我用控件變量m_player調(diào)用GetControls<>函數(shù)來獲得CWMPControls類的對象以調(diào)用該的成員函數(shù)pause<>函數(shù),根據(jù)錯誤提示可知,我這行代碼是寫在視圖類中,調(diào)用pause<>屬于類外調(diào)用,但是該類不認(rèn)識CWMPControls類,所以要在視圖類的最前面要加個頭文件#include"wmpcontrols.h"。7.1.2調(diào)試二在調(diào)試播放列表時,看到播放列表中顯示了路徑感覺沒有必要,所以修改了代碼使只把歌曲名給了代碼。但這樣再來播放列表上的歌曲時不能播放。圖10 調(diào)試二的說明圖原因:是因為播放列表上只有歌曲名,沒了路徑的話是不能找到文件的,所以不能播放。所以解決方法是修改代碼使其把歌曲路徑遞給播放列表。但后來聽老師的解說,可以通過取字符串函數(shù)來從路徑里取文件名。即播放列表中儲存的是路徑,但顯示的是路徑中文件名。7.2測試結(jié)果編寫好的軟件能選擇打開、播放、暫停、停止音頻文件和視頻文件,并能控制聲音的大小,以及播放的進度,可以播放*.mp3、*.wma、*.mdi、*.wav、*avi、*dat等格式的多媒體文件。同時還具有自制的播放列表,可以按照列表上的順序進行一曲、下一曲的播放,同時還有保存列表和刪除歌曲的作用。圖11 播放器播放音樂展示圖12 播放器隱藏列表展示7.3關(guān)鍵源代碼voidCYLJ_Media_PlayerDlg::OnBUTTONopen<>{ charszFileFilter[]= "所有支持類型|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*.mov;*.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|" "Mp3File<*.mp3>|*.mp3|" "Mp4File<*.mp4>|*.mp4|" "WmaFile<*.wma>|*.wma|" "VideoFile<*.dat>|*.dat|" "WaveFile<*.wav>|*.wav|" "AVIFile<*.avi>|*.avi|" "MovieFile<*.mov>|*.mov|" "RmvbFile<*.rmvb>|*.rmvb|" "MediaFile<*.mmm>|*.mmm|" "MidFile<*.mid;*,rmi>|*.mid;*.rmi|" "MPEGFile<*.mpeg>|*.mpeg|" "MPGFile<*.mpg>|*.mpg|" "AllFile<*.*>|*.*||";//文件類型過濾 CFileDialogdlg<TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter>; POSITIONpos=dlg.GetStartPosition<>; if<dlg.DoModal<>==IDOK> {while<pos!=NULL>{ m_PathName=dlg.GetNextPathName<pos>; m_list2.AddString<m_PathName>; } }}voidCYLJ_Media_PlayerDlg::OnBUTTONpanse<>{ flag2=!flag2; if<flag2>{m_player.GetControls<>.pause<>; } else{ m_player.GetControls<>.play<>; }}voidCYLJ_Media_PlayerDlg::OnBUTTONplay<>{ CStringstr; intindex=m_list2.GetCurSel<>; m_list2.GetText<index,str>; m_player.SetUrl<str>; }voidCYLJ_Media_PlayerDlg::OnBUTTON4mute<>{ n=!n; if<n> { vol=m_player.GetSettings<>.GetVolume<>;//獲取當(dāng)前音量值 m_player.GetSettings<>.SetMute<TRUE>;//設(shè)為靜音 } else { m_player.GetSettings<>.SetMute<FALSE>;//解除靜音 m_player.GetSettings<>.SetVolume<vol>;//恢復(fù)當(dāng)前音量值 }}voidCYLJ_Media_PlayerDlg::OnBUTTONpre<>{ CStringstr; intindex=m_list2.GetCurSel<>-1;//光標(biāo)減一 if<index<0>index=m_list2.GetCount<>-1;//如果播放完第一曲就自動播放最后一首 m_list2.GetText<index,str>;//獲得當(dāng)前光標(biāo)所指的路徑字符串 m_player.SetUrl<str>;//開始播放上一首 m_list2.SetCurSel<index>;//自動置光標(biāo)}voidCYLJ_Media_PlayerDlg::OnBUTTONnext<>{ CStringstr; intindex=m_list2.GetCurSel<>+1;//光標(biāo)加一 if<index>=m_list2.GetCount<>>index=0;//如果播放完最后一曲就自動播放第一首 m_list2.GetText<index,str>;//獲得當(dāng)前光標(biāo)所指的路徑字符串 m_player.SetUrl<str>;//開始播放下一首 m_list2.SetCurSel<index>;//自動置光標(biāo)}voidCYLJ_Media_PlayerDlg::OnBUTTONshow<>{ flag=!flag; if<flag>SetWindowPos<NULL,0,0,500,520,SWP_NOMOVE>; elseSetWindowPos<NULL,0,0,702,520,SWP_NOMOVE>;}voidCYLJ_Media_PlayerDlg::OnDblclkListMenu<>{ CStringstr; intindex=m_list2.GetCurSel<>; m_list2.GetText<index,str>;

溫馨提示

  • 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論