多媒體視頻播放器參考模板_第1頁(yè)
多媒體視頻播放器參考模板_第2頁(yè)
多媒體視頻播放器參考模板_第3頁(yè)
多媒體視頻播放器參考模板_第4頁(yè)
多媒體視頻播放器參考模板_第5頁(yè)
已閱讀5頁(yè),還剩28頁(yè)未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡(jiǎn)介

1、目錄多媒體視頻播放器11基本功能描述12設(shè)計(jì)思路13軟件設(shè)計(jì)23.1 設(shè)計(jì)步驟33.2 界面設(shè)計(jì)63.3 關(guān)鍵功能的實(shí)現(xiàn)93.3.1 “打開(kāi)”功能的實(shí)現(xiàn)93.3.2 “播放”、“暫停”、“停止”“全屏”功能的實(shí)現(xiàn)103.3.3 “上一首”和“下一首”功能實(shí)現(xiàn)123.3.4 音量滑動(dòng)條功能的實(shí)現(xiàn)123.3.5 播放列表功能的實(shí)現(xiàn)143.3.6 進(jìn)度滑動(dòng)條功能的實(shí)現(xiàn)154結(jié)論與心得體會(huì)165參考文獻(xiàn)176思考題187 附錄187.1調(diào)試報(bào)告187.1.1 調(diào)試一187.1.2 調(diào)試二197.2 測(cè)試結(jié)果207.3 關(guān)鍵源代碼211 / 33多媒體視頻播放器1基本功能描述多媒體視頻播放工具是目前計(jì)算

2、機(jī)必備的一個(gè)軟件,比較流行的有 Real Player、Windows Media Player 以及國(guó)產(chǎn)暴風(fēng)影音等,能夠播放 RM、RMVB、MP3、MPEG、DAT 等多種格式的視頻文件 mp3、wma、mdi、wav、avi、dat 等格式的音頻文件。用VC+軟件設(shè)計(jì)并編寫出一個(gè)多媒體視頻播放器。在設(shè)計(jì)期間,可以選擇使用的多媒體控件,制作與用戶交互性較好的應(yīng)用程序界面。對(duì)于控件有多種,可以自己選擇。本次課程設(shè)計(jì)要使用 VC+6.0 內(nèi)部的 ActiveX 控件Windows Media Player 控件,建立自己的多媒體播放器。此多媒體播放器具有打開(kāi)文件、播放、暫停、停止、關(guān)閉、全屏、

3、音量滑塊調(diào)節(jié)、進(jìn)度滑塊調(diào)節(jié)、快進(jìn)、快退、顯示隱藏播放列表等基本功能, 可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *.avi、 *.dat、 *.mpg、*.rmvb等格式的多媒體文件。同時(shí)還具有自制的播放列表,可以按照列表上的順序進(jìn)行一曲、下一曲的播放。2設(shè)計(jì)思路Windows Media Player是一款Windows系統(tǒng)自帶的播放器,支持通過(guò)插件增強(qiáng)功能。其控件作為本次課設(shè)的媒體控件可以滿足要求。并且該控件是微軟自帶的免費(fèi)控件,通常每個(gè)電腦都應(yīng)有這個(gè)控件,方便設(shè)計(jì)出來(lái)的軟件在各個(gè)電腦運(yùn)行。根據(jù) Windows Media Player 和各個(gè)按鈕控件功能的特點(diǎn),首先

4、要在初始化中對(duì)CWMPControl,CWMPSettings,CWMPPlaylist,CWMPMedia 等類的對(duì)象進(jìn)行綁定和定義。播放器的一些基本的功能如播放、暫停、全屏、靜音、快進(jìn)、快退等主要是調(diào)用 CWMPControl 和 CWMPPlayer 類中的成員函數(shù)來(lái)進(jìn)行實(shí)現(xiàn)。對(duì)于打開(kāi)按鈕,需要調(diào)用通用文件對(duì)話框類,調(diào)用 szFileFilter()文件過(guò)濾函數(shù)和 GetFileName()獲取文件名函數(shù)。除了以上提到的功能的實(shí)現(xiàn),還有進(jìn)度滑條Slider_progress和音量滑動(dòng)條Slider2是通過(guò)對(duì) CSliderCtrl 類實(shí)現(xiàn)的。音量滑塊50,新建list.txt,計(jì)時(shí)器開(kāi)啟

5、打開(kāi)程序點(diǎn)擊“保存列表”初始化 List.txt點(diǎn)擊“打開(kāi)”選擇文件顯示在list.txt中刪除列表雙擊列表框中內(nèi)容或選中單擊“播放”開(kāi)始播放OnTimer()音量調(diào)節(jié)點(diǎn)擊“快進(jìn)”點(diǎn)擊“下一首”點(diǎn)擊“停止”點(diǎn)擊“暫停/繼續(xù)”獲取位置參數(shù)返回響應(yīng)CwnpSetting類中的Setvolume響應(yīng)CwnpControl類中的fastForward函數(shù)獲取當(dāng)前播放位置返回給進(jìn)度條滑塊的SetPos獲取音量返回SetPosint idex=當(dāng)前光標(biāo)位置加1,讀取idex中文本,返回SetUrl函數(shù)響應(yīng)CwnpControl類中的stop函數(shù)響應(yīng)CwnpControl類中的pause函數(shù)和play函數(shù)圖

6、1視頻播放器流程圖3軟件設(shè)計(jì)設(shè)計(jì)平臺(tái)可以是Win32的操作平臺(tái)上,使用已安裝的VC6.0+進(jìn)行設(shè)計(jì)和調(diào)試。在設(shè)計(jì)前要確保平臺(tái)中有WMP控件。結(jié)合之前的設(shè)計(jì)思路,使用 Windows Media Player 等控件來(lái)制作多媒體視頻播放器。若是Win64這與VC6.0+不兼容,可以選擇更高的版本。3.1 設(shè)計(jì)步驟打開(kāi) VC+6.0,點(diǎn)擊“新建”,在“新建”窗口選擇“工程”選項(xiàng)卡。由于程序是基于對(duì)話框的 MFC 應(yīng)用程序使用 Windows Media Player等控件來(lái)制作多媒體視頻播放器。設(shè)置好地址位置和工程名后點(diǎn)“確定”。這里的工程名字可以是自己的名字拼音縮寫,也可以沒(méi)有任何含義。圖2“新

7、建”對(duì)話框示意圖在點(diǎn)擊“確定”后進(jìn)入到了“MFC 應(yīng)用程序向?qū)Р襟E1”的設(shè)置界面,選擇“基本對(duì)話框”,然后點(diǎn)擊“下一步”。圖3“MFC 應(yīng)用程序向?qū)А笔疽鈭D在剩下的3個(gè)步驟中,全部選擇默認(rèn)的設(shè)置,不要做隨意更改,直至“完成”便實(shí)現(xiàn)了對(duì)話框的創(chuàng)建。然后是插入控件,先把系統(tǒng)初始化的按鈕用“Delete”刪除,在單擊鼠標(biāo)右鍵選擇“插入 ActiveX 控件”,在跳出的對(duì)話框中選擇“Windows Media Player”(一般當(dāng)電腦安裝了Windows Media Player,其控件也應(yīng)該存在) ,點(diǎn)擊“確定”。圖4添加“Windows Media Player”控件示意圖雖然已經(jīng)插入控件了,但

8、這時(shí)的控件還不能使用,因?yàn)榭丶母鞣N類并沒(méi)有一起加入工程類中。右擊鼠標(biāo),選擇“建立類向?qū)А保@時(shí)系統(tǒng)跳出對(duì)話框提示是否加入來(lái)自控件的類,直接點(diǎn)擊“確定”就可以了。圖5“Windows Media Player”控件類添加示意圖接著對(duì)控件關(guān)聯(lián)變量,右擊加入的WMP控件,點(diǎn)擊“屬性”,把ID改為“IDC_player”,然后打開(kāi)“建立類向?qū)А秉c(diǎn)到“Member Variables”頁(yè)面向IDC_player添加變量。單擊“ADD Variables”,會(huì)彈出圖6所示的“Add member name”對(duì)話框,命名為“m_player”,設(shè)為控制“Control”型,點(diǎn)擊“OK” 。圖6變量命名示意

9、圖關(guān)聯(lián)變量之后才算是真正的添加了該控件,可以發(fā)現(xiàn)在關(guān)聯(lián)變量之后,控件工具欄多了“Windows Media Player”控件的選項(xiàng),并且在“Source Files”中增加了17個(gè)類,相應(yīng)的頭文件也增加了17個(gè),其中最主要的類為 Cwmpplayer4,Cwmpcontrols,Cwmpmedia,Cwmpsettings 四個(gè)大類。 Cwmpplayer4 類主要是關(guān)于對(duì)其他類的對(duì)象的調(diào)用以及基本的控件功能的實(shí)現(xiàn),提供了與 Windows Media Player 控件進(jìn)行交互的基本方法,其中部分成員函數(shù)還能夠進(jìn)一步獲取得到其他相關(guān)類對(duì)象的實(shí)例;Cwmpcontrols 類主要是對(duì)控件的更

10、多的操作;Cwmpmedia 類主要是對(duì)于媒體文件資源的一些操作; Cwmpsettings 類主要是對(duì)于媒體文件中的一些基本設(shè)置的操作。3.2 界面設(shè)計(jì)首先是打開(kāi)按鈕,用于媒體文件的打開(kāi);然后依次是播放、暫停、停止、快進(jìn)、快退、靜音、全屏、退出、上一首、下一首、顯示/隱藏按鈕,以及視頻進(jìn)度滑塊和音量滑塊條 Slider 控件。對(duì)控件主要進(jìn)行變量的關(guān)聯(lián),以及 ID 的修改,對(duì)于普通按鈕進(jìn)行ID修改,結(jié)果如下下表1、表2、表3和表4所示。表1控件 ID 以及對(duì)應(yīng)響應(yīng)函數(shù)表按鈕 ID 控件 Caption消息響應(yīng)函數(shù)類型IDC_BUTTON_open打開(kāi)OnBUTTONopen()命令按鈕IDC_

11、BUTTON_fullscreen全屏OnBUTTONfullscreen()命令按鈕IDC_BUTTON_play播放OnBUTTONplay()命令按鈕IDC_BUTTON_panse暫停/播放OnBUTTONpanse()命令按鈕IDC_BUTTON_stop停止OnBUTTONstop()命令按鈕IDC_BUTTON_fastforward快進(jìn)OnBUTTONFastforward()命令按鈕IDC_BUTTON_fasteverse快退OnBUTTONfasteverse()命令按鈕IDC_BUTTON_pre上一曲OnBUTTONpre()命令按鈕IDC_BUTTON_next下一

12、曲OnBUTTONnext()命令按鈕IDC_BUTTON4_mute靜音OnBUTTON4mute()命令按鈕IDCANCEL退出無(wú)命令按鈕IDC_BUTTON_show隱藏/展開(kāi)OnBUTTONshow()命令按鈕IDC_BUTTON_save保存列表OnBUTTONsave()命令按鈕IDC_BUTTON_clear刪除列表OnBUTTONclear()命令按鈕然后是加入一些關(guān)聯(lián)變量的控件,之前加入了WMPlayer,還要加入類別為“滑塊”的Slider來(lái)當(dāng)調(diào)節(jié)聲音的滑塊,還有加入類別為“列表框”的List Control來(lái)充當(dāng)播放列表。表2控件 ID 以及關(guān)聯(lián)變量表按鈕ID控件 Cap

13、tion變量名稱類型IDC_OCX1WMPlayerm_playerCWMPlayer4IDC_SLIDER_progressSliderm_jinduCSliderCtrlIDC_SLIDER_volSliderm_volCSliderCtrlIDC_LIST_MENUList Controlm_list2CListBox在按鈕對(duì)應(yīng)的消息響應(yīng)函數(shù)中寫程序?qū)⒁玫奖?的變量和WMP控件中的5個(gè)類的函數(shù)。在這五個(gè)類中:Cwmpplayer4 類主要是關(guān)于對(duì)其他類的對(duì)象的調(diào)用以及基本的控件功能的實(shí)現(xiàn),是WMP控件函數(shù)與外部交流的橋梁,不可缺少。寧外其部分成員函數(shù)還能夠進(jìn)一步獲取得到其他相關(guān)類對(duì)象的

14、實(shí)例; Cwmpcontrols 類主要是對(duì)控件的更多的操作,例如播放、暫停;Cwmpmedia 類主要是對(duì)于媒體文件資源的一些操作,例如獲取路徑和名稱;Cwmpplaylist類主要是關(guān)于播放列表的操作;Cwmpsettings 類主要是對(duì)于媒體文件中的一些基本設(shè)置的操作。表3其他類及對(duì)應(yīng)對(duì)象表類名頭文件名對(duì)象名 CWMPControlsWmpcontrols.hm_ControlCWMPSettingswmpsettings.hm_SettingCWMPMediawmpmedia.hm_MediaCWMPPlaylistwmpplaylist.hm_Playlist表4其他數(shù)據(jù)定義 數(shù)據(jù)類

15、型變量名數(shù)據(jù)類型變量名CStringm_FileNameBOOLflag,flag2,nCStringm_PathNameintvol除了對(duì)各個(gè)控件關(guān)聯(lián)變量以及消息響應(yīng)函數(shù),還要對(duì)對(duì)話框類進(jìn)行消息響應(yīng)函數(shù)的關(guān)聯(lián),如當(dāng)一首歌播放完后的模式選擇。應(yīng)用到 WM_TIMER 消息響應(yīng)函數(shù)以及SetTimer()和KillTimer()函數(shù),如圖建立OnTimer函數(shù)。圖7添加“WMTIMER”消息函數(shù)示意圖還有菜單的設(shè)計(jì),其相對(duì)簡(jiǎn)單,只要名稱和ID與表1保持一致就可以了。在“Resource File”中右擊鼠標(biāo)添加“MENU”,屬性為“IDR_MENU1”。但是菜單并未與對(duì)話窗口有實(shí)質(zhì)聯(lián)系,需要將菜

16、單加入到“IDD_SHIFAN_DIALOG”中來(lái),在 “IDD_SHIFAN_DIALOG”窗口空白右鍵單擊,選中菜單“IDR_MENU1”,這樣便完成了對(duì)菜單的加載。圖8控件按鈕分布圖編譯運(yùn)行程序后得到了初步的界面效果圖,當(dāng)然還沒(méi)有加入函數(shù)。同時(shí)在左上角會(huì)顯示自己寫的工程名“YLJ_Media_Player”,如圖8所示。3.3 關(guān)鍵功能的實(shí)現(xiàn)對(duì)于各個(gè)按鈕、列表功能的實(shí)現(xiàn)主要是通過(guò)對(duì)各個(gè)函數(shù)加入相應(yīng)的代碼,下文將列出相應(yīng)的關(guān)鍵代碼。3.3.1 “打開(kāi)”功能的實(shí)現(xiàn)“打開(kāi)”按鈕主要是實(shí)現(xiàn)了對(duì)打開(kāi)的文件進(jìn)行過(guò)濾,主要使用了szFileFilter()函數(shù)。點(diǎn)擊確定時(shí),首先是把文件路徑傳給播放列表

17、中,列表在從文件路徑中提取文件名來(lái)顯示。然后又把文件路徑通過(guò)SetUrl()交給控件讀取播放。void CYLJ_Media_PlayerDlg:OnBUTTONopen() char szFileFilter="所有支持類型|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*.mov;*.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|" "Mp3 File(*.mp3)|*.mp3|" "Mp4 File(*.mp4)|*.mp4|" "Wma File(*.wma)|*.

18、wma|" "Video File(*.dat)|*.dat|" "Wave File(*.wav)|*.wav|" "AVI File(*.avi)|*.avi|" "Movie File(*.mov)|*.mov|" "Rmvb File(*.rmvb)|*.rmvb|" "Media File(*.mmm)|*.mmm|" "Mid File(*.mid;*,rmi)|*.mid;*.rmi|" "MPEG File(*.mpeg

19、)|*.mpeg|" "MPG File(*.mpg)|*.mpg|" "All File(*.*)|*.*|"/文件類型過(guò)濾 CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); POSITION pos=dlg.GetStartPosition(); if(dlg.DoModal()=IDOK) while(pos!=NULL) m_PathName=dlg.GetNextPathName(pos); m_list2.AddString(m_PathName); 3.3

20、.2 “播放”、“暫?!?、“停止”“全屏”功能的實(shí)現(xiàn)其實(shí)和3.3.1中提到一種播放方法一樣使用了SetUrl()函數(shù)來(lái)實(shí)現(xiàn)。void CYLJ_Media_PlayerDlg:OnBUTTONplay() CString str;int index=m_list2.GetCurSel();m_list2.GetText(index,str);m_player.SetUrl(str); “暫停”和“停止”功能實(shí)現(xiàn)方法和播放差不多,只是使用的m_player.GetControls()中函數(shù)改變了。void CYLJ_Media_PlayerDlg:OnBUTTONpanse() flag2=!f

21、lag2;if(flag2) m_player.GetControls().pause();elsem_player.GetControls().play();void CYLJ_Media_PlayerDlg:OnBUTTONstop() m_player.GetControls().stop();全屏功能的實(shí)現(xiàn)也是調(diào)用SetFullScreen(TRUE)函數(shù)來(lái)實(shí)現(xiàn)。void CYLJ_Media_PlayerDlg:OnBUTTONfullscreen() m_player.SetFullScreen(TRUE);3.3.3 “上一首”和“下一首”功能實(shí)現(xiàn)“上一首”就是讓光標(biāo)往上移一行,

22、也就是對(duì)應(yīng)的光標(biāo)變量(index)減去1。當(dāng)要判斷光標(biāo)在第一行的情況,也就是index=0的時(shí)候,這時(shí)光標(biāo)應(yīng)移到最后一首歌曲或視頻上。void CYLJ_Media_PlayerDlg:OnBUTTONpre() CString str;int index=m_list2.GetCurSel()-1;/光標(biāo)減一if(index<0) index=m_list2.GetCount()-1;/如果播放完第一曲就自動(dòng)播放最后一首m_list2.GetText(index,str);/獲得當(dāng)前光標(biāo)所指的路徑字符串m_player.SetUrl(str);/開(kāi)始播放上一首m_list2.SetCu

23、rSel(index);/自動(dòng)置光標(biāo) 其“下一首”和“上一首”大同小異,只不過(guò)index應(yīng)加1,在光標(biāo)為最后一行時(shí)應(yīng)判斷移動(dòng)到第一行。void CYLJ_Media_PlayerDlg:OnBUTTONnext() CString str;int index=m_list2.GetCurSel()+1; /光標(biāo)加一if(index>=m_list2.GetCount() index=0;/如果播放完最后一曲就自動(dòng)播放第一首m_list2.GetText(index,str); /獲得當(dāng)前光標(biāo)所指的路徑字符串m_player.SetUrl(str); /開(kāi)始播放下一首m_list2.Set

24、CurSel(index);/自動(dòng)置光標(biāo)3.3.4 音量滑動(dòng)條功能的實(shí)現(xiàn)音量滑動(dòng)條是區(qū)別于其他命令按鈕的,它是滑塊,是調(diào)用 CSliderCtrl 控件的 m_vol 變量來(lái)實(shí)現(xiàn)的。音量調(diào)節(jié)函數(shù)主要是使用一個(gè)嵌套函數(shù)“m_player.GetSettings().SetVolume(100-m_vol.GetPos();”實(shí)現(xiàn)的。設(shè)置音量用的是“SetVolume()”函數(shù)。在“OnInitDialog()”函數(shù)中已對(duì)滑塊范圍進(jìn)行初始化CSliderCtrl* pSlide1 =(CSliderCtrl*) GetDlgItem(IDC_SLIDER1);pSlide1->SetRang

25、e(0, 100); 使音量變化范圍為0100。void CYLJ_Media_PlayerDlg:OnReleasedcaptureSlider1(NMHDR* pNMHDR, LRESULT* pResult) m_player.GetSettings().SetVolume(100-m_vol.GetPos();*pResult = 0;另外靜音程序如下,在靜音按鈕按下后把系統(tǒng)音量保存在vol中,等恢復(fù)時(shí)使用,再設(shè)置為靜音,再次按下后取消靜音然后恢復(fù)開(kāi)始音量。void CYLJ_Media_PlayerDlg:OnBUTTON4mute() n=!n;if (n)vol=m_player

26、.GetSettings().GetVolume();/ 獲取當(dāng)前音量值m_player.GetSettings().SetMute(TRUE);/設(shè)為靜音elsem_player.GetSettings().SetMute(FALSE);/解除靜音m_player.GetSettings().SetVolume(vol);/恢復(fù)當(dāng)前音量值3.3.5 播放列表功能的實(shí)現(xiàn)播放列表主要有“隱藏/展開(kāi)”、“保存列表”、 “清空列表” 這三個(gè)功能。這個(gè)列表的三個(gè)功能實(shí)現(xiàn)前提第一次運(yùn)行程序時(shí)會(huì)在E盤新建一個(gè)txt文檔并命名為“l(fā)ist.txt”。初始化函數(shù)如下:CStdioFile *fsp=new C

27、StdioFile("E:list.txt",CFile:modeRead);CString str;while(fsp->ReadString(str)m_list2.AddString(str);fsp->Close();delete fsp;文檔可以保存播放文件列表使在下次打開(kāi)時(shí)可自動(dòng)的生成播放列表。下面是“保存列表”的函數(shù)。void CYLJ_Media_PlayerDlg:OnBUTTONsave() / TODO: Add your control notification handler code hereCStdioFile file;CStri

28、ng strtemp;file.Open("E:list.txt",CFile:modeCreate|CFile:modeReadWrite|CFile:typeText); for(int i=0;i<m_list2.GetCount();i+)CString strtemp;m_list2.GetText(i,strtemp);strtemp+="n"/換行file.WriteString(strtemp);file.Close();然后是“清除列表”功能,用“ResetContent()”直接清除列表。void CYLJ_Media_Play

29、erDlg:OnBUTTONclear() CStdioFile file; m_list2.ResetContent(); file.Open("E:list.txt",CFile:modeCreate); file.Close(); 最后是“顯示/隱藏”功能,其實(shí)就是在重新設(shè)置窗口大小,若展開(kāi)則恢復(fù)原來(lái)的窗口大小,這里使用了SetWindowPos()函數(shù)。void CYLJ_Media_PlayerDlg:OnBUTTONshow() flag=!flag;if(flag) SetWindowPos(NULL,0,0,500,520,SWP_NOMOVE);else

30、SetWindowPos(NULL,0,0,702,520,SWP_NOMOVE);3.3.6 進(jìn)度滑動(dòng)條功能的實(shí)現(xiàn)進(jìn)度條可以時(shí)時(shí)顯示播放的位置,而視頻進(jìn)度滑塊的初始化放在OnHScroll()函數(shù)中實(shí)現(xiàn)。void CYLJ_Media_PlayerDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar) int m_time;m_time=(int)m_player.GetCurrentMedia().GetDuration();m_jindu.SetRange(0,m_time);/初始化視頻進(jìn)度滑塊int NewPos;

31、if(CSliderCtrl*)pScrollBar=&m_jindu)switch(nSBCode)case SB_THUMBTRACK:m_jindu.SetPos(nPos);m_player.GetControls().SetCurrentPosition(double)nPos);break;case SB_PAGEDOWN:NewPos=m_jindu.GetPos();m_player.GetControls().SetCurrentPosition(double)NewPos);break;case SB_PAGEUP:NewPos=m_jindu.GetPos();m

32、_player.GetControls().SetCurrentPosition(double)NewPos);break;視頻進(jìn)度的控制主要是SB_THUMBTRACK、SB_PAGEDOWN、SB_PAGEUP,三個(gè)消息響應(yīng)即移動(dòng)滑塊、單擊滑塊右邊滑條、單擊滑塊左邊滑條的消息響應(yīng)來(lái)實(shí)現(xiàn)視頻進(jìn)度的控制。4結(jié)論與心得體會(huì)平時(shí)我挺喜歡聽(tīng)歌看電影的,當(dāng)看到老師給的選題中有多媒體視頻播放器這個(gè)題目,我開(kāi)始是還是挺激動(dòng)的,能夠自己做一個(gè)簡(jiǎn)單的程序,滿足自己的愛(ài)好也是挺有成就感的。在一開(kāi)始選這個(gè)課題時(shí),我和其他同學(xué)都覺(jué)得很難。不像簡(jiǎn)單計(jì)算器和畫圖軟件等課題曾在上課提到過(guò),對(duì)于多媒體播放器我看到看到了題目

33、不知道該怎樣做。然后我花了大量時(shí)間去了解第一步怎么做,分別查找了各個(gè)控件基本用法功能,最后選用了 Windows Media Player 控件,因?yàn)槲襳c中只能找到這個(gè)與視頻有關(guān)的控件,于是在網(wǎng)上查了一些關(guān)于 Windows Media Player 控件的資料,結(jié)果按照網(wǎng)上說(shuō)的方法來(lái)根本無(wú)法實(shí)現(xiàn),因?yàn)榫W(wǎng)上都說(shuō)要先插入17個(gè)Windows Media Player 控件相關(guān)的類,但是我vc卻不照網(wǎng)上那樣實(shí)現(xiàn),所以在頭兩天是在摸索中,耗費(fèi)了很多時(shí)間,最后我先不管第一步,直接插入控件,然后發(fā)現(xiàn)關(guān)聯(lián)變量時(shí)會(huì)有提示要插入17個(gè)類,點(diǎn)確定就行,問(wèn)題就這么解決了。然后我和同組的同學(xué)在網(wǎng)上找相應(yīng)的資料,找

34、到怎樣在VC+6.0里加入控件,各個(gè)控件的說(shuō)明書。進(jìn)過(guò)比較和分析,我們一致采用Windows Media Player多媒體軟件旗下的控件WMP控件。因?yàn)閃MP控件本身就是微軟自帶的控件,不存在兼容問(wèn)題。還有每個(gè)電腦多都有Windows Media Player播放器,其控件也都注冊(cè)了。知道怎樣使用WMP控件,就可以很輕松地完成軟件流程圖的設(shè)計(jì)。我結(jié)合了自己在網(wǎng)上搜索的資料,做好了整個(gè)多媒體播放器的整體設(shè)計(jì),確定了軟件的框架、主要構(gòu)件以及構(gòu)件之間的關(guān)聯(lián),而后由總體設(shè)計(jì)逐漸深入完成軟件的詳細(xì)設(shè)計(jì)和開(kāi)發(fā)過(guò)程。編寫代碼更加有條理,才會(huì)更加符合軟件工程的標(biāo)準(zhǔn)。整個(gè)程序設(shè)計(jì)我做了兩天,每天熬夜到1點(diǎn)多,

35、也學(xué)會(huì)了不少東西。最后終于變好了,編寫的軟件可以滿足課程設(shè)計(jì)給出的要求。系統(tǒng)能選擇打開(kāi)、播放、暫停、停止音頻文件和視頻文件,并能控制聲音的大小, 可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *avi、 *dat 等格式的多媒體文件。看到點(diǎn)擊每一個(gè)按鈕都能有相應(yīng)的反應(yīng),頓時(shí)有了一種莫名的成就感,也感覺(jué)到自己的汗水得到了回報(bào)。紙上得來(lái)終覺(jué)淺,絕知此事要躬行。要想完成一項(xiàng)作品,并不是想的那樣簡(jiǎn)單,做起來(lái)總是會(huì)遇到問(wèn)題的,這時(shí)就需要要解決問(wèn)題的能力和堅(jiān)持不懈的決心。通過(guò)本次試驗(yàn),我收獲了很多,對(duì)面向?qū)ο蟪绦蛟O(shè)計(jì)這門課所學(xué)的知識(shí)有了更好的理解。書山有路勤為徑,學(xué)海無(wú)涯苦作舟。5參考文

36、獻(xiàn)1揣錦華.面向?qū)ο蟪绦蛟O(shè)計(jì)與 VC+實(shí)踐M.西安電子科技大學(xué)出版社.20052鄭阿奇.Visual C+教程M.北京:機(jī)械工業(yè)出版社.20043周長(zhǎng)發(fā).Visual C+.NET 多媒體編程M.電子工業(yè)出版社.20024Steve Mack.流媒體寶典.電子工業(yè)出版社.20035王育堅(jiān).Visual C+面向?qū)ο缶幊探坛?第 2 版.北京:清華大學(xué)出版社,20086思考題1) 控件自帶的類和本程序中的類是如何共同作用的?答:控件自帶的的類肯定會(huì)在對(duì)話框的主程序中被調(diào)用,那么就要在主程序中#include入對(duì)應(yīng)類的頭文件。對(duì)需要用到的類生成對(duì)應(yīng)的對(duì)象以實(shí)現(xiàn)類中函數(shù)的使用。調(diào)用了控件類中的函數(shù)后

37、,還需要調(diào)用對(duì)話框自身的函數(shù),比如消息及消息響應(yīng)函數(shù)等函數(shù),以及各控件對(duì)應(yīng)的消息響應(yīng)函數(shù)。如此便可以實(shí)現(xiàn)控件自帶類和本程序中的類的共同作用。2) 說(shuō)明程序中調(diào)用的控件函數(shù)的作用?答:控件的不同類有不同的函數(shù)與之對(duì)應(yīng),不同函數(shù)有不同的功能。其函數(shù)功能見(jiàn)表。表5控件函數(shù)和對(duì)應(yīng)的功能功能控件函數(shù)功能控件函數(shù)打開(kāi)OnBUTTONopen()進(jìn)度刷新OnTimer()播放OnBUTTONplay()停止 OnBUTTONstop()暫停OnBUTTONpause()上一首 OnBUTTONpre()快進(jìn)OnBUTTONFastforward下一首OnBUTTONnext()快退OnBUTTONFastr

38、everse()保存列表OnBUTTONsave()聲音滑塊OnReleasedcaptureSlider1()清空列表OnBUTTONclear()全屏OnBUTTONfullscreen()進(jìn)度控制OnHScroll()7 附錄7.1調(diào)試報(bào)告7.1.1 調(diào)試一運(yùn)行時(shí)錯(cuò)誤指明如下如圖所示:圖9 調(diào)試一錯(cuò)誤提示錯(cuò)誤提示為:use of undefined type 'CWMPControls'。在這行代碼中,我用控件變量m_player調(diào)用GetControls()函數(shù)來(lái)獲得CWMPControls類的對(duì)象以調(diào)用該的成員函數(shù)pause()函數(shù),根據(jù)錯(cuò)誤提示可知,我這行代碼是寫在

39、視圖類中,調(diào)用pause()屬于類外調(diào)用,但是該類不認(rèn)識(shí)CWMPControls類,所以要在視圖類的最前面要加個(gè)頭文件#include "wmpcontrols.h"。7.1.2 調(diào)試二在調(diào)試播放列表時(shí),看到播放列表中顯示了路徑感覺(jué)沒(méi)有必要,所以修改了代碼使只把歌曲名給了代碼。但這樣再來(lái)播放列表上的歌曲時(shí)不能播放。圖10調(diào)試二的說(shuō)明圖原因:是因?yàn)椴シ帕斜砩现挥懈枨?,沒(méi)了路徑的話是不能找到文件的,所以不能播放。所以解決方法是修改代碼使其把歌曲路徑遞給播放列表。但后來(lái)聽(tīng)老師的解說(shuō),可以通過(guò)取字符串函數(shù)來(lái)從路徑里取文件名。即播放列表中儲(chǔ)存的是路徑,但顯示的是路徑中文件名。7.2

40、 測(cè)試結(jié)果編寫好的軟件能選擇打開(kāi)、播放、暫停、停止音頻文件和視頻文件,并能控制聲音的大小,以及播放的進(jìn)度,可以播放*.mp3、 *.wma、 *.mdi、 *.wav、 *avi、 *dat 等格式的多媒體文件。同時(shí)還具有自制的播放列表,可以按照列表上的順序進(jìn)行一曲、下一曲的播放,同時(shí)還有保存列表和刪除歌曲的作用。圖11播放器播放音樂(lè)展示圖12播放器隱藏列表展示7.3 關(guān)鍵源代碼void CYLJ_Media_PlayerDlg:OnBUTTONopen() char szFileFilter="所有支持類型|*.mp3;*.mp4;*.wma;*.dat;*.wav;*.avi;*

41、.mov;*.rmvb;*.mmm;*.mid;*.rmi;*.mpeg;*.mpg|""Mp3 File(*.mp3)|*.mp3|""Mp4 File(*.mp4)|*.mp4|""Wma File(*.wma)|*.wma|""Video File(*.dat)|*.dat|""Wave File(*.wav)|*.wav|""AVI File(*.avi)|*.avi|""Movie File(*.mov)|*.mov|""Rm

42、vb File(*.rmvb)|*.rmvb|""Media File(*.mmm)|*.mmm|""Mid File(*.mid;*,rmi)|*.mid;*.rmi|""MPEG File(*.mpeg)|*.mpeg|""MPG File(*.mpg)|*.mpg|""All File(*.*)|*.*|"/文件類型過(guò)濾CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter);POSITION pos=dlg.Ge

43、tStartPosition();if(dlg.DoModal()=IDOK)while(pos!=NULL)m_PathName=dlg.GetNextPathName(pos);m_list2.AddString(m_PathName);void CYLJ_Media_PlayerDlg:OnBUTTONpanse() flag2=!flag2;if(flag2) m_player.GetControls().pause();elsem_player.GetControls().play();void CYLJ_Media_PlayerDlg:OnBUTTONplay() CString

44、str;int index=m_list2.GetCurSel();m_list2.GetText(index,str);m_player.SetUrl(str);void CYLJ_Media_PlayerDlg:OnBUTTON4mute() n=!n;if (n)vol=m_player.GetSettings().GetVolume();/ 獲取當(dāng)前音量值m_player.GetSettings().SetMute(TRUE);/設(shè)為靜音elsem_player.GetSettings().SetMute(FALSE);/解除靜音m_player.GetSettings().SetVo

45、lume(vol);/恢復(fù)當(dāng)前音量值void CYLJ_Media_PlayerDlg:OnBUTTONpre() CString str;int index=m_list2.GetCurSel()-1;/光標(biāo)減一if(index<0) index=m_list2.GetCount()-1;/如果播放完第一曲就自動(dòng)播放最后一首m_list2.GetText(index,str);/獲得當(dāng)前光標(biāo)所指的路徑字符串m_player.SetUrl(str);/開(kāi)始播放上一首m_list2.SetCurSel(index);/自動(dòng)置光標(biāo)void CYLJ_Media_PlayerDlg:OnBUT

46、TONnext() CString str;int index=m_list2.GetCurSel()+1; /光標(biāo)加一if(index>=m_list2.GetCount() index=0;/如果播放完最后一曲就自動(dòng)播放第一首m_list2.GetText(index,str); /獲得當(dāng)前光標(biāo)所指的路徑字符串m_player.SetUrl(str); /開(kāi)始播放下一首m_list2.SetCurSel(index);/自動(dòng)置光標(biāo)void CYLJ_Media_PlayerDlg:OnBUTTONshow() flag=!flag;if(flag) SetWindowPos(NULL,0,0,500,520,SWP_NOMOVE);else SetWindowPos(NULL,0,0,702,520,SWP_NOMOVE);void CYLJ_Media_PlayerDlg:OnDblclkListMenu() CString str;int index=

溫馨提示

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

最新文檔

評(píng)論

0/150

提交評(píng)論