可換膚MP3播放器的設(shè)計與實現(xiàn)_第1頁
可換膚MP3播放器的設(shè)計與實現(xiàn)_第2頁
可換膚MP3播放器的設(shè)計與實現(xiàn)_第3頁
可換膚MP3播放器的設(shè)計與實現(xiàn)_第4頁
可換膚MP3播放器的設(shè)計與實現(xiàn)_第5頁
已閱讀5頁,還剩57頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、課程設(shè)計設(shè)計報告指導(dǎo)老師評語:評定成績: 簽名: 日期:目錄1概述 4課程設(shè)計目的: 41.2 設(shè)計任務(wù)與要求: 51.3 開發(fā)環(huán)境: 62 系統(tǒng)設(shè)計的基本概念與原理 6基本概念與知識 8MFC簡介 8關(guān)于MCI 8系統(tǒng)實現(xiàn)的基本原理及過程: 93系統(tǒng)的總體設(shè)計與分析 103.1 MP3播放器需求分析 10需求矩陣 11功能模塊圖: 11系統(tǒng)設(shè)計實現(xiàn)的基本原理與過程 134 系統(tǒng)詳細(xì)設(shè)計與實現(xiàn) 154.1 創(chuàng)建新工程 154.2 設(shè)置控件模塊 154.3 界面布局設(shè)計 164.4 動態(tài)鏈接庫 184.5 添加圖片 184.6 各模塊功能設(shè)計 194.6.1 處理“打開”按鈕 194.6.2 處

2、理“播放”按鈕 244.6.3 處理“暫?!卑粹o 274.6.4 處理“停止”按鈕 284.6.5 處理“退出”按鈕 28程序中的主要類和函數(shù) 285系統(tǒng)的調(diào)試與運(yùn)行 345.1 測試方法 345.2 測試過程 345.3 測試結(jié)論 356 課程設(shè)計總結(jié) 36參考文獻(xiàn) 37附錄 部分程序代碼 381概述摘 要I的多媒體播放器。該播放器是基于MFC集成開發(fā)環(huán)境,利用系統(tǒng)的MCI(media controller interface)命令接口來編程,具有體積小,支持的播放格式多、系統(tǒng)資源占用少、支持播放列表編輯等功能優(yōu)勢。另,本課程設(shè)計還用到了在對話框中加入連接到Internet的方法。關(guān)鍵詞 程

3、序設(shè)計;MCI;C+;音樂播放器;超級鏈接:本課程設(shè)計通過對Windows API的多媒體和資源文件的高層控制MCI進(jìn)行封裝,建立了一個MP3播放器的類CPlayerDlg,使得我們不必研究MCI的內(nèi)部函數(shù),輕松調(diào)用CPlayerDlg類的函數(shù),就能實現(xiàn)播放WAV、MID、MP3等Windows音頻格式的文件。1、通過本次課程設(shè)計,熟練掌握一種開發(fā)語言(Java或C+、C#)和開發(fā)環(huán)境Eclipse或.NET。開發(fā)語言的熟練需要通過編寫一定長度的代碼(10002000行代碼)才能達(dá)到,開發(fā)環(huán)境的熟練需要反復(fù)的程序調(diào)試訓(xùn)練。2、加深對軟件工程的理解,訓(xùn)練編寫程序的良好習(xí)慣。包括:認(rèn)真編寫需求分析

4、文檔、做好系統(tǒng)功能設(shè)計、學(xué)會自己進(jìn)行程序的算法、數(shù)據(jù)結(jié)構(gòu)設(shè)計、3、培養(yǎng)良好的程序設(shè)計風(fēng)格(模塊劃分、接口設(shè)計、函數(shù)和變量命名規(guī)則)和習(xí)慣(程序備份、版本更新與控制),提高軟件測試、調(diào)試的能力與技巧。通過本次課程設(shè)計,應(yīng)該達(dá)到具有獨立完成小型應(yīng)用設(shè)計的能力,具備編寫較為規(guī)范的軟件設(shè)計文檔的能力。1.2 設(shè)計任務(wù)與要求:MP3媒體播放器軟件是采用MFC設(shè)計的Windows應(yīng)用程序,在MFC的集成環(huán)境下填加文檔/視圖結(jié)構(gòu)。這種程序框架和簡單應(yīng)用程序之間的重要區(qū)別就在于形成應(yīng)用程序的主窗口不只需要一個類的對象,而是需要三個類對象:1框架窗口類對象,2視圖類對象,3文檔類對象。1、2、3組成應(yīng)用程序的界

5、面。在加入MP3的解碼使程序界面有播放MP3的功能。MP3媒體播放應(yīng)用程序是用Windows Media Player的界面插件,并且應(yīng)用Media Player的解碼功能,使應(yīng)用程序能夠界面清析、播放格式增加并且操作簡單。本課程設(shè)計將實現(xiàn)目前Winamp播放器所具有的多數(shù)基本功能,并提供一些額外的輔助功能。具體而言,其實現(xiàn)的功能和技術(shù)服務(wù)包括以下幾個方面:(1)高層的音頻服務(wù)。(2)媒體控制接口。(3)連接多媒體設(shè)備,并自動判斷設(shè)備類型。(4)API函數(shù)mciSendCommand()。(5)打開和關(guān)閉指定的音頻文件。(6)實現(xiàn)復(fù)讀機(jī)功能。(7)播放視頻格式文件。(8)出錯情形說明。(9)程

6、序托盤管理。(10)超級鏈接類的使用。1.3 開發(fā)環(huán)境:列出開發(fā)工具、程序運(yùn)行的支持環(huán)境(操作系統(tǒng)、數(shù)據(jù)庫等)。操作系統(tǒng):Windows XP 簡體中文版開發(fā)平臺:Visual開發(fā)平臺介紹:Visual C+ 。它是微軟公司推出的開發(fā)Win32應(yīng)用程序(Windows 95/98/2000/XP/NT),面向?qū)ο蟮目梢暬晒ぞ摺K淖畲髢?yōu)點就是提供了功能強(qiáng)大的MFC類庫,MFC是一個很大的C+類層次結(jié)構(gòu),其中封裝了大量的類及其函數(shù),很多Windows程序所共有的標(biāo)準(zhǔn)內(nèi)容可以由MFC的類來提供,MFC類為這些內(nèi)容提供了用戶接口的標(biāo)準(zhǔn)實現(xiàn)方法,程序員所要做的就是通過預(yù)定義的接口把具體應(yīng)用程序特有

7、的東西填入這個輪廓,這將簡化編程工作,大大的減少程序員編寫的代碼數(shù)量,使編程工作變得更加輕松容易。MFC (Microsoft Foundation Class 是用來編寫Windows 應(yīng)用程序的C + 類集,其中封裝了分之所以Windows API 函數(shù)和Windows 控件,使用MFC 類庫和Visual C + 提供的高度可視的應(yīng)用程序開發(fā)工具,可使應(yīng)用程序開發(fā)變得簡單,提高代碼的可靠性和可重用性。隨著多媒體性能的極大提升,程序中經(jīng)常要播放一段視頻或者一段音頻,如果能夠簡單地插入音頻和視頻,將極大縮短程序的開發(fā)時間。本文基于MFC 在Visual C + 環(huán)境下利用Windows Me

8、dia Player 控件實現(xiàn)了音頻視頻文件的播放。Visual C+作為開發(fā)工具,不僅僅因為曾經(jīng)有過使用它的經(jīng)驗,看中的更是它的功能強(qiáng)大和使用方便。它本身不僅具有極其強(qiáng)大的編程能力,它允許選擇和管理外接程序,并內(nèi)含多種實用控件,這些對Visual C+的擴(kuò)充又進(jìn)一步增強(qiáng)了它的開發(fā)環(huán)境的能力。 1.4 可行性分析和需求分析 經(jīng)濟(jì)可行性由于該軟件屬于個人開發(fā),無需過大的資金投入.所以經(jīng)濟(jì)上是可行的。 技術(shù)可行性VC+6.0中文版作為一個關(guān)系型數(shù)據(jù)庫系統(tǒng),它提供了面向?qū)ο蟮木幊碳夹g(shù),可簡化數(shù)據(jù)庫管理,使開發(fā)應(yīng)用程序這艱辛的工作就象堆木那樣簡單方便.另外, VC+6.0中文版開發(fā)的應(yīng)用程序可以獨立運(yùn)

9、行于WINDOWS平臺. VC+6.0中文版,它是運(yùn)行于W indows95/98和Window XP平臺32位數(shù)據(jù)庫系統(tǒng),充分發(fā)揮了32位微處理器強(qiáng)大的32位數(shù)據(jù)處理性能.它功能強(qiáng)大,直觀易用,支持客戶/服務(wù)器結(jié)構(gòu)和面向?qū)ο缶幊?提供多種可視化編程工具,支持最新Internet技術(shù),WWW數(shù)據(jù)庫的設(shè)計,最新流行的ActiveX 等。 VC+6.0中文版完全支持OOP(面向?qū)ο螅┑膽?yīng)用程序設(shè)計方法,VC+6.0使用了真正的類,包括繼承性,封裝性和多態(tài)性,用可視方式創(chuàng)建類,查看類及類代碼;利用表單向?qū)нM(jìn)行專業(yè)級界面設(shè)計;對表關(guān)系進(jìn)行可視化查看;可利用OLE自動化來包含其他軟件(如Excel, w

10、ord)中的對象并使用這些軟件。通過VC+6.0對象和事件模型,用戶可以快速創(chuàng)建和實現(xiàn)無模式(Modeless)的應(yīng)用程序;利用生成器和工具欄,開發(fā)人員可以快速開發(fā)應(yīng)用程序,而省去編寫大量的代碼、定義繁多的屬性。總之,VC+6.0中文版是一種適用于專業(yè)人員的開發(fā)工具。 人員可行性我目前時間充足,可以完成開發(fā)任務(wù)。而且C+語言和算法的功底還行,可以參與系統(tǒng)的算法設(shè)計與開發(fā)。我都有有深厚的文字功底,可以參與用戶文檔的制作、內(nèi)部文檔整理、后期測試等任務(wù)。本系統(tǒng)開發(fā)設(shè)計思想: 盡量利用人們現(xiàn)有的軟件環(huán)境,采用簡單快捷的設(shè)計方案,從而達(dá)到使用方便,容易操作的目的; 此播放器可以滿足大多數(shù)人日常使用的需要

11、,并達(dá)到操作過程的直觀、方便、實用、安全等要求; 軟件采用模塊化程序設(shè)計方法,既便于軟件功能的各種組合和修改,又便于技術(shù)維護(hù)人員進(jìn)行補(bǔ)充、維護(hù)。2 系統(tǒng)設(shè)計的基本概念與原理1.1基本概念與知識MP3播放器的設(shè)計是利用MFC應(yīng)用程序、媒體控制接口MIC的基本知識而設(shè)計的。MFC簡介MFC是Visual C+是核心。MFC類庫將所有圖形用戶界面的元素如窗口、菜單和按鈕等都以類的形式進(jìn)行了封裝,MFC AppWizard向?qū)Ц鶕?jù)繼承性利用MFC派生出自己的類,并對Windows應(yīng)用程序進(jìn)行了分解,利用MFC派生類對應(yīng)用程序重新進(jìn)行組裝,同時還規(guī)定了應(yīng)用程序中各個MFC派生類對象之間的相互聯(lián)系,實現(xiàn)了

12、標(biāo)準(zhǔn)Windows應(yīng)用程序的功能,這就是向?qū)傻乃^MFC應(yīng)用程序框架。每個MFC類都包括了一些函數(shù),函數(shù)放到類中,符合C+編程方法。這些函數(shù),必須通過類定義對象才能使用1。關(guān)于MCIWindows已經(jīng)提供了一個關(guān)于多媒體處理的動態(tài)鏈接庫WINMM.DLL,通過調(diào)用它所提供的API函數(shù),就可以使用MCI指令進(jìn)行多媒體方面的操作了。MCI的全稱是Media Control Interface(媒體控制接口),為各種多媒體設(shè)備,包括音頻視頻交錯(AVI)重放、動畫播放機(jī)、VCD、CD播放器以及聲卡上的波形音頻和合成器系統(tǒng),提供了一個公共的接口。用MCI函數(shù)可以給上述的任何一種設(shè)備發(fā)出命令,告訴它

13、們開始、結(jié)束、暫停、倒退、快進(jìn)等就像按動MP3播放器面板上的按鈕一樣。每一個設(shè)備的特殊命令依賴于設(shè)備本身的功能。實際上MCI是一個高級的函數(shù)調(diào)用接口,可以把它看作揖個解釋器,通過它,就可以直接和外部音頻或視頻設(shè)備打交道了。必須注意的是,在MCI工作過程中,需要在指令中調(diào)用API函數(shù),這樣才能實現(xiàn)應(yīng)用設(shè)備與多媒體設(shè)備連接。有3個與MCI有關(guān)的API,即mciSendString(、mciExecute(和mciGetErrorString(。mciSendString函數(shù)的功能是傳送指令字符串給MCI;mciExecute的功能和mciSendString一樣,不同的是當(dāng)發(fā)生錯誤時mciExec

14、ute會彈出對話框顯示錯誤信息;mciGetErrorString的功能是將MCI錯誤代碼轉(zhuǎn)換為字符串。在系統(tǒng)實現(xiàn)的基本原理及過程:本課程設(shè)計中,將會說明如何用MCI和API函數(shù)編程實現(xiàn)播放Windows支持的各種音頻文件。MCI(Media Control Interface)媒體控制接口是MircroSoft提供的一組多媒體設(shè)備和文件的標(biāo)準(zhǔn)接口,它的好處是可以方便地控制絕大多數(shù)多媒體設(shè)備包括音頻、視頻、影碟、錄像等多媒體設(shè)備,而不需要知道它們的內(nèi)部工作狀況。它所支持的媒體格式包括avi、wav、mpeg等等2。音頻技術(shù)發(fā)展較早,幾年前一些技術(shù)已經(jīng)成熟并產(chǎn)品化,音頻技術(shù)主要包括四個方面:音頻

15、數(shù)字化、語音處理、語音合成及語音識別。音頻文件包括多種格式的文件,MP3就是其中的一種。MP3的全稱是Moving Picture Experts Group,Audio Layer ,它所使用的技術(shù)是在VCD(MPEG-1的音頻壓縮技術(shù)上發(fā)展出的第三代,而不是MPEG-3。MP3是一種音頻壓縮的國際技術(shù)標(biāo)準(zhǔn),它一般需要MP3播放器來讀取。首先確定要解決的問題是弄清楚MCI函數(shù)與命令消息的名稱類型和功能;其次是通過分析媒體播放的具體過程,在打開媒體設(shè)備的過程中應(yīng)用程序需要做哪些事情,以便在應(yīng)用程序中加入對這些過程支持的代碼;在對應(yīng)用程序的流程有了大致的輪廓以后,再開始考慮程序框架和應(yīng)用程序外觀

16、的設(shè)計.最后,也是最關(guān)鍵的就是編寫實現(xiàn)播放器的代碼將播放器的基本功能實現(xiàn),緊接著就是程序的調(diào)試和完善。3系統(tǒng)的總體設(shè)計與分析3.1 MP3播放器需求分析本章主要討論了系統(tǒng)的需求分析,從用戶角度分析系統(tǒng)整體要實現(xiàn)的功能及要完成的任務(wù),并細(xì)化所有功能點.作為MP3 播放器系統(tǒng),它應(yīng)該包含以下功能:實現(xiàn)基本的播放、暫停、停止功能;能實現(xiàn)快進(jìn)快退以及顯示播放列表等功能。同時本文還要求需要實現(xiàn)換膚功能。具體目標(biāo)如下:1 能夠方便地選擇本機(jī)上的一個mp3文件進(jìn)行播放。選擇mp3文件時,不需要有鍵盤輸入操作。2 播放過程中可以暫停,暫停后可以從暫停處再次播放。播放過程中可以停止,按下播放按鈕后,可以再次從開

17、頭播放本文件。本程序提供“快進(jìn)”、“快退”按鈕,播放和暫停狀態(tài)都可以快進(jìn)快退,并保持當(dāng)前狀態(tài)不變。3 播放、暫停、或停止?fàn)顟B(tài)中,都可以選擇其它mp3文件代替當(dāng)前mp3文件進(jìn)行播放。4 本程序中要有一個滾動條來顯示當(dāng)前的mp3文件播放位置,拖動滾動條,可以調(diào)節(jié)mp3文件的播放位置。5 在面板上顯示mp3文件當(dāng)前播放的時間。播放時間隨時刷新,配合好前面的播放調(diào)節(jié)操作。7)本程序中要有一個面板來顯示列表,并且擁有刪除、添加文件等功能。8)本程序中要可以更換皮膚。9 提供“幫助”,“關(guān)于”等菜單按鈕。退出按鈕要絕對有效,能夠完美地結(jié)束整個程序,不在內(nèi)存中留下垃圾。10 界面盡量美觀,程序運(yùn)行時不要出現(xiàn)

18、異常。本章主要討論了系統(tǒng)的需求分析,從用戶角度分析系統(tǒng)整體要實現(xiàn)的功能及要完成的任務(wù),并細(xì)化所有功能點,為每一功能但定義“需求描述”、“輸入輸出”。同時為方便后期設(shè)計、編碼和測試。需求矩陣表 3-1 需求矩陣表需求功能需求描述播放狀態(tài)顯示1、用戶界面能顯示正在被播放歌曲的進(jìn)度,顯示歌曲的播放狀態(tài);2、用戶能夠顯示正在被播放歌曲的音量;3、顯示被播放歌曲的歌名。播放控制1、用戶能夠控制正在被播放歌曲的進(jìn)度,能夠控制歌曲停止、暫停與播放;2、用戶能夠調(diào)節(jié)正在被播放歌曲的音量;3、用戶能夠切換上一首和下一首歌曲列表中歌曲管理1、在歌曲列表中能夠添加用戶所需要的歌曲文件的文件名,并長期保存在該列表中直

19、到用戶刪除該列表中的歌曲名。核心播放控制1、完成歌曲播放最核心的部分,能夠?qū)⒋蜷_MP3文件,并將其解碼,然后啟動音頻硬件播放歌曲。3.2功能模塊圖:總體設(shè)計模塊其中輸入模塊里面有負(fù)責(zé)打開文件的功能,供用戶選擇文件,處理模塊負(fù)責(zé)多媒體文件的音量大小的調(diào)節(jié),調(diào)大.調(diào)小和靜音功能,還有對播放文件的播放, 暫停,快進(jìn)快退,停止等必備功能,輸出模塊負(fù)責(zé)在顯示屏顯示文件!列表控制系統(tǒng)功能模塊圖圖形界面mp3播放器。根據(jù)常識來看,打開軟件后,會出現(xiàn)圖形界面,然后點擊圖形界面,選擇mp3文件,點擊開始,即可播放了。程序規(guī)劃流程圖如圖3-3所示:等待信號發(fā)生并處理圖3-3 程序規(guī)劃流程圖無論在什么平臺下,無論用

20、什么開發(fā)工具,GUI應(yīng)用程序的基本開發(fā)方法都是相似的。開發(fā)人員都要編寫兩方面的代碼,即應(yīng)用于實現(xiàn)圖形界面的代碼和用于實現(xiàn)程序運(yùn)行的代碼,然后再將這兩部分的代碼結(jié)合起來,本程序也不例外。4 系統(tǒng)詳細(xì)設(shè)計與實現(xiàn)4.1 創(chuàng)建新工程用MFC AppWizard(exe創(chuàng)建一個新工程,命名為MailServer(如下圖3-1所示)(1在MFC AppWizard中按照下列步驟設(shè)置工程的屬性:a設(shè)置應(yīng)用程序類型為Dialog Based模式。b其他步均為默認(rèn)設(shè)置。圖4-1用MFC AppWizard(exe創(chuàng)建一個新工程4.2 設(shè)置控件模塊單擊ResourceView面板,選擇Dialog選項,添加一個新

21、的對話框,命名為IDD_IDD_PLAYER_DIALOG,該對話框隸屬于類CPlayerDlg.設(shè)置Push Boutton控件的Styles為“ownersdraw”,調(diào)整各控件的大小和相對位置如下圖3-2所示。圖4-2 各控件的設(shè)置和大小調(diào)整4.3 界面布局設(shè)計系統(tǒng)界面的運(yùn)行結(jié)果圖如下圖所示。程序編寫完畢,編譯、運(yùn)行,用戶即可看到一個美觀大方的簡單MP3播放器。當(dāng)程序運(yùn)行時,Mp3播放起將會實現(xiàn)其播放功能,它能實現(xiàn)播放WAV、MID、MP3、VCD、AVI、CD、MPEG等全部Windows音頻格式的文件,運(yùn)行界面。系統(tǒng)總體結(jié)構(gòu)圖 4-3 軟件系統(tǒng)總體設(shè)計圖根據(jù)系統(tǒng)總體結(jié)構(gòu)設(shè)計劃分系統(tǒng)子

22、結(jié)構(gòu),并定義每一子系統(tǒng)的“功能描述”、“界面設(shè)計”、“數(shù)據(jù)說明”及“處理流程”等。該概要設(shè)計主要為后期的詳細(xì)設(shè)計及編碼提供參考。功能描述1. 完成音頻文件的讀取。2. 能夠打開音頻設(shè)備,播放相應(yīng)的音頻文件的內(nèi)容。3. 能夠根據(jù)控制命令控制音頻文件列表的播放順序。4. 能夠根據(jù)控制命令控制音頻設(shè)備的音量大小。實驗最終的效果圖預(yù)覽如圖4-4:圖4-4 程序?qū)崿F(xiàn)播放MP3的界面4.4 動態(tài)鏈接庫 單擊Project菜單中的Setting.命令,打開Project Setting對話框,單擊Link選項卡,在Object/library modules中加入winmm.lib。如圖4-5所示。圖4-5

23、 加入多媒體處理的動態(tài)鏈接庫4.5 添加圖片添加主對話框和各個控件的圖片。本課程設(shè)計具有美觀大方的界面。界面的實現(xiàn)是通過編程將不同的Bitmap圖片覆蓋到對應(yīng)的主對話框及控件上。因此,需要在Resouce資源中添加Bitmap圖片。單擊Resouce View面板,右擊Player Resources項,在彈出的菜單中選擇Insert,添加Bitmap內(nèi)容。右擊Bitmap,在彈出的菜單中選擇Insert,向工程中添加與控件相對應(yīng)的圖標(biāo)。Mp3Player對話框中所用控件的屬性描述如表所示??丶蘒D描述IDC_STATIC_INFO_WNDGroup Box控件,用來顯示“信息窗口”IDC_S

24、TATIC_INFOStatic Text控件,用來顯示各種信息IDC_STATIC_OPERATIONGroup Box控件,用來顯示“操作面板”IDC_BUTTON_OPEN按鈕控件,單擊它用來選擇歌曲IDC_BUTTON_PLAY按鈕控件,單擊它用來播放歌曲IDC_BUTTON_PAUSE按鈕控件,單擊它用來暫停播放歌曲IDC_BUTTON_STOP按鈕控件,單擊它用來停止播放歌曲IDC_BUTTON_VOLUME按鈕控件,單擊它用來設(shè)定音量IDC_BUTTON_QUIT按鈕控件,單擊它用來退出程序4.6 各模塊功能設(shè)計4.6.1 處理“打開”按鈕單擊“打開”按鈕后,在OnButtonO

25、pen(函數(shù)中,首先對文件類型進(jìn)行過濾,調(diào)用DoModa(函數(shù)打開對話框選擇一個媒體文件,通過GetPathName(函數(shù)獲取文件路徑,通過GetFileName(函數(shù)獲取文件名后,調(diào)用DisplayInfo(函數(shù)在Static Text控件上顯示“你選擇的歌曲是(文件名)”,然后利用GetDlgItem(函數(shù)設(shè)置“暫?!卑粹o以及“停止”按鈕不可用。先點擊打開按鈕,彈出如圖4-6-1對話框:圖 4-6-1void CActiveMovie3:OnOpen( char szFileFilter="Mp3 File(*.mp3|*.mp3|""Wma File(*.w

26、ma|*.wma|""Video File(*.dat|*.dat|""Wave File(*.wav|*.wav|""AVI File(*.avi|*.avi|""Media File(*.mmm|*.mmm|""Mid File(*.mid;*,rmi|*.mid;*.rmi|""MPEG File(*.mpeg|*.mpeg|""All File(*.*|*.*|"/文件類型過濾CFileDialogdlg(TRUE,NULL,NULL,O

27、FN_HIDEREADONLY,szFileFilter;if(dlg.DoModal(=IDOKCString PathName=dlg.GetPathName(;PathName.MakeUpper(;m_ActiveMovie.SetFileName(PathName;打開文件以及對文件的處理之類的函數(shù)控制#if !defined(AFX_PLAYERDLG_H_FE3B843D_BE0F_46C6_9038_4AA6AA8032A8_INCLUDED_#define AFX_PLAYERDLG_H_FE3B843D_BE0F_46C6_9038_4AA6AA8032A8_INCLUDE

28、D_#if _MSC_VER > 1000#pragma once#endif / _MSC_VER > 1000/ CPlayerDlg dialog#include"mmsystem.h"class CPlayerDlg : public CDialog/ Constructionpublic:int hour,minute,second;/時間變量:小時、分鐘、秒鐘DWORD cdlen;/某個音頻文件的總時間長度DWORD m_count;/設(shè)備型號void Tplay(;void Thide(;void Tdehide(;void forfor(;vo

29、id forfor1(;DWORD getinfo(DWORD item;CString aa;/當(dāng)前播放文件的路徑CString file255;/存放所有待播放文件路徑名的字符串?dāng)?shù)組CString file1255;/存放所有待播放文件路徑名的字符串?dāng)?shù)組1int fi,fr;/歌曲文件列表中,當(dāng)前歌曲所在位置及最后一首歌曲所在的位置DWORD cdfrom,cdto; /歌曲的起點和終點CBitmapButton m_bexit;CBitmapButton m_bmim;CBitmapButton m_bhelp;CBitmapButton m_play;CBitmapButton m_s

30、top;CBitmapButton m_open;CBitmapButton m_rp;CBitmapButton m_pop;CBitmapButton m_next;CBitmapButton m_sdel;CBitmapButton m_per;CBitmap m_bg,m_bg1;BOOL m_flag,m_flag1,m_flag2,m_flag3;/各個控件的狀態(tài)標(biāo)志CPlayerDlg(CWnd* pParent = NULL; / standard constructor對播放器的整體結(jié)構(gòu)進(jìn)行模塊的總體設(shè)計/ CAboutDlg dialog used for App Abou

31、t/進(jìn)行程序主界面的初始化,并向控件中添加Bitmap圖BOOL CPlayerDlg:OnInitDialog(.SetWindowText("MCI播放器"/程序主界面在屏幕中的位置,及主界面的大小MoveWindow(200,200,303,103;/加載程序背景圖片m_bg.LoadBitmap(IDB_BITMAPBG;/以下部分是在控件上加載圖片m_play.LoadBitmaps(IDB_BITMAPPLAY1,IDB_BITMAPPLAY3;m_stop.LoadBitmaps(IDB_BITMAPSTOP1,IDB_BITMAPSTOP3;m_open.L

32、oadBitmaps(IDB_BITMAPOPEN1,IDB_BITMAPOPEN3;m_bhelp.LoadBitmaps(IDB_BITMAPHELP1,IDB_BITMAPHELP2;m_bmim.LoadBitmaps(IDB_BITMAPMIM1,IDB_BITMAPMIM2;m_bexit.LoadBitmaps(IDB_BITMAPEXIT1,IDB_BITMAPEXIT2;m_rp.LoadBitmaps(IDB_BITMAPRP1,IDB_BITMAPRP2;m_pop.LoadBitmaps(IDB_BITMAPC,IDB_BITMAPD;m_pop.LoadBitmaps

33、(IDB_BITMAPA,IDB_BITMAPB;m_per.LoadBitmaps(IDB_BITMAPPER1,IDB_BITMAPPER2;m_next.LoadBitmaps(IDB_BITMAPNEXT1,IDB_BITMAPNEXT2;m_sdel.LoadBitmaps(IDB_BITMAPDEL1,IDB_BITMAPDEL2;./在程序的主界面上顯示控件void CPlayerDlg:OnPaint( if (IsIconic(/ 判斷是否為程序的主界面 /以下部分有Visual C+自動生成CPaintDC dc(this; SendMessage(WM_ICONERASE

34、BKGND, (WPARAM dc.GetSafeHdc(, 0;int cxIcon = GetSystemMetrics(SM_CXICON;int cyIcon = GetSystemMetrics(SM_CYICON;CRect rect;GetClientRect(int x = (rect.Width( - cxIcon + 1 / 2;int y = (rect.Height( - cyIcon + 1 / 2;dc.DrawIcon(x, y, m_hIcon;else /畫筆工作區(qū)CPaintDC dc(this;CRect rect;GetClientRect(CDC dc

35、Mem; dcMem.CreateCompatibleDC(&dc; BITMAP bitMap;m_bg.GetBitmap(&bitMap;CBitmap *pbmpOld=dcMem.SelectObject(&m_bg;dc.StretchBlt(0,0,502,rect.Height(,&dcMem,0,0,bitMap.bmWidth,bitMap.bmHeight,SRCCOPY;/利用位圖填充應(yīng)用程序的界面/添加控件,設(shè)定主界面上控件的位置和大小m_bexit.MoveWindow(284,0,19,19,false;m_bmim.MoveWin

36、dow(263,0,19,19,false;m_bhelp.MoveWindow(242,0,19,19,false;m_play.MoveWindow(13,60,40,40,false;m_stop.MoveWindow(55,68,30,30,false;m_open.MoveWindow(93,65,30,30,false;m_rp.MoveWindow(133,68,30,30,false;m_pop.MoveWindow(282,22,20,78,false;m_per.MoveWindow(170,60,40,40,false;m_next.MoveWindow(200,60,4

37、0,40,false;m_sdel.MoveWindow(484,30,18,40,false; CPlayerDlg:CPlayerDlg(CWnd* pParent /*=NULL*/: CDialog(CPlayerDlg:IDD, pParent.(10) 實現(xiàn)彈出關(guān)于對話框的功能void CActiveMovie3:About( CAboutDlg aboutDlg; /定義變量aboutDlg.DoModal(; /彈出關(guān)于對話框4.6.2 處理“播放”按鈕單擊“播放”按鈕后,在OnButtonPlay(函數(shù)中,通過調(diào)用MCIMP3類的MCIOpen(函數(shù)獲取剛才選擇的文件路徑以及

38、文件名,調(diào)用該類的MCIPlay(函數(shù)播放歌曲,此時調(diào)用DisplayInfo(函數(shù)在Static Text控件上顯示“正在播放的歌曲是(文件名)”,進(jìn)行歌曲的播放,然后利用GetDlgItem(函數(shù)設(shè)置“播放”按鈕不可用。(1) 為了循環(huán)播放,我們利用定時器來工作,采用OnTimer(函數(shù)來激活定時器:void CActiveMovie3:OnTimer(UINT nIDEventCString m_filename; /定義文件變量double CurPos=m_ActiveMovie.GetCurrentPosition(; /獲得播放位置if(CurPos= = 0m_list.Set

39、CurSel(0; /選擇列表框的第一個文件m_list.GetText(0,m_filename;m_ActiveMovie.SetAutoStart(1; /設(shè)置自動播放m_ActiveMovie.SetFileName(m_filename; /設(shè)置文件m_ActiveMovie.Run(; /播放m_list.GetCurSel(; /獲得播放文件m_list.InsertString(-1,m_filename; /插入列表框最后m_list.DeleteString(0; /刪除用過的文件CDialog:OnTimer(nIDEvent;(3)循環(huán)控制函數(shù)oid CMediaPla

40、yerDlg:OnRepeat( /循環(huán)控制函數(shù),實現(xiàn)對循環(huán)的控制功能if(!isRepeat /判斷是否正在循環(huán)SetTimer(1,2000,NULL; /設(shè)置循環(huán)的標(biāo)志為1,循環(huán)間隔為2秒isRepeat=TRUE; /將循環(huán)變量設(shè)為TURESetDlgItemText(IDC_STATIC2,"模式:循環(huán)" /將靜態(tài)文本顯示為循環(huán)模式 elseKillTimer(1; /停止標(biāo)志為1的循環(huán)isRepeat=FALSE; /將循環(huán)變量設(shè)為FALSESetDlgItemText(IDC_STATIC2,"模式:普通" /將靜態(tài)文本顯示為普通模式(4)

41、全屏播放功能調(diào)用了,代碼如下:void CActiveMovie3:OnFulscreeen( /全屏函數(shù),實現(xiàn)全屏播放視頻的功能m_ActiveMovie.Pause(; /暫停播放m_ActiveMovie.SetFullScreenMode(true; /設(shè)置全屏播放屬性為真,即開啟全屏播放m_ActiveMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED; /設(shè)置播放窗口大小為最大m_ActiveMovie.Run(; /繼續(xù)播放(5)查詢歌曲代碼如下:void CActiveMovie3:OnChaxun( CSongSet cSet;UpdateDa

42、ta(;m_Edit1.TrimLeft(;if(m_Edit1.IsEmpty(MessageBox("要查詢的歌曲不能為空!"return;CSongDlg dlg;cSet.m_strFilter.Format("歌曲名稱='%s'",m_Edit1;cSet.Open(;if(!cSet.IsEOF(/如果打開的記錄集有記錄CSongDlg dlg;dlg.m_Gequ =cSet.m_GeQu;dlg.m_Geshou =cSet.m_GeShou;dlg.m_Zuoci =cSet.m_ZuoCi;dlg.m_Zuoqu =c

43、Set.m_ZuoQu;dlg.m_Zhuanji =cSet.m_ZhuanJi;dlg.DoModal(;UpdateData(FALSE;/自動更新表單中控件顯示的內(nèi)容 elseMessageBox("沒有查到你要找的歌曲記錄!"if(cSet.IsOpen(cSet.Close(;(6)添加歌曲void CActiveMovie3:OnTianjia( / TODO: Add your control notification handler code hereCSongDlg dlg;CSongSet pSet;if(dlg.DoModal(=IDOKpSet.O

44、pen(;pSet.AddNew(;pSet.m_GeQu =dlg.m_Gequ;pSet.m_GeShou =dlg.m_Geshou;pSet.m_ZhuanJi =dlg.m_Zhuanji;pSet.m_ZuoCi =dlg.m_Zuoci;pSet.m_ZuoQu =dlg.m_Zuoqu;pSet.Update(;pSet.Requery(;(6)循環(huán)控制函數(shù)void CActiveMovie3:OnRepeat( /循環(huán)控制函數(shù),實現(xiàn)對循環(huán)的控制功能if(!isRepeat /判斷是否正在循環(huán)SetTimer(1,2000,NULL; /設(shè)置循環(huán)的標(biāo)志為1,循環(huán)間隔為2秒isR

45、epeat=TRUE; /將循環(huán)變量設(shè)為TURESetDlgItemText(IDC_STATIC2,"模式:循環(huán)" /將靜態(tài)文本顯示為循環(huán)模式 elseKillTimer(1; /停止標(biāo)志為1的循環(huán)isRepeat=FALSE; /將循環(huán)變量設(shè)為FALSESetDlgItemText(IDC_STATIC2,"模式:普通" /將靜態(tài)文本顯示為普通模式4.6.3 處理“暫?!卑粹o單擊“暫?!卑粹o后,在OnButtonPause(函數(shù)中,首先通過調(diào)用MCIMP3類的MCIPause(函數(shù)暫停正在播放的歌曲,然后調(diào)用DisplayInfo(函數(shù)在Static

46、 Text控件上顯示“暫停播放歌曲(文件名)”,此時的歌曲處于暫停時的進(jìn)度上,利用GetDlgItem(函數(shù)設(shè)置“播放”按鈕可用。增加按鈕 “播放”void CActiveMovie3:OnPlay( m_ActiveMovie.Run(;/播放文件 SetTimer(0,20,NULL;/設(shè)置定時器 void CActiveMovie3:OnStop( m_ActiveMovie.Stop(;/停止播放文件 KillTimer(0;/關(guān)掉定時器 4.6.4 處理“停止”按鈕單擊“停止”按鈕后,在OnButtonStop(函數(shù)中,首先通過調(diào)用MCIMP3類的MCIPause(函數(shù)停止正在播放的

47、歌曲,然后調(diào)用DisplayInfo(函數(shù)在Static Text控件上顯示“停止播放歌曲(文件名)”,將停止正在播放歌曲,利用GetDlgItem(函數(shù)設(shè)置“暫停”按鈕和“停止”按鈕不可用。void CActiveMovie3:OnStop( /停止播放函數(shù)KillTimer(1; /停止循環(huán)m_ActiveMovie.Stop(; /停止播放void CActiveMovie3:OnPause( /暫停播放函數(shù)m_ActiveMovie.Pause(; /調(diào)用控件的暫停函數(shù)暫停播放4.6.5 處理“退出”按鈕單擊“退出”按鈕后,在OnButtonQuit(函數(shù)中,調(diào)用CDialog類的On

48、Cancel(函數(shù)將退出對話框,結(jié)束程序的運(yùn)行。單擊Resource View面板,選擇Dialog選項,添加一個新的對話框,命名為IDD_IDD_PLAYER_DIALOG,該對話框隸屬于類CPlayerDlg。向新對話框中添加新的控件,各控件屬性如表4-6所示。表4-6 對話框IDD_PLAYER_DIALOG的控件資源標(biāo)識類型相關(guān)屬性及功能說明IDC_PLAYPush Button播放歌曲IDC_STOPPush Button停止播放歌曲IDC_OPENPush Button打開文件對話框IDC_RPPush Button錄制某段音頻IDC_PERPush Button播放上一首歌曲ID

49、C_NEXTPush Button播放下一首歌曲IDC_POPPush Button彈出存放待播放文件的列表IDC_SDELPush Button刪除某首文件IDC_BEXITPush Button退出程序IDC_BHELPPush Button幫助文件IDC_BMIMPush Button托盤管理IDC_SLIDERSlider音頻文件播放進(jìn)度IDC_LISTList Box存放待播放文件的列表用ClassWizard給對話框IDD_PLAYER_DIALOG對應(yīng)的CPlayerDlg類添加成員變量,創(chuàng)建好數(shù)據(jù)成員變量后就能夠很容易的訪問控件對象。增加的數(shù)據(jù)成員變量如表4-7所示。表4-7

50、對話框IDD_PLAYER_DIALOG的成員變量資源標(biāo)識類型成員變量IDC_PLAYCButtonM_playIDC_STOPCButtonM_stopIDC_OPENCButtonM_openIDC_RPCButtonM_rpIDC_PERCButtonM_perIDC_NEXTCButtonM_nextIDC_POPCButtonM_popIDC_SDELCButtonM_sdelIDC_BEXITCButtonM_bexitIDC_BHELPCButtonM_bhelpIDC_BMIMCButtonM_bmimIDC_SLIDERCSliderCtrlM_slIDC_LISTCList

51、BoxM_list添加主對話框和各個控件的圖片。界面的實現(xiàn)是通過編程將不同的Bitmap圖片覆蓋到對應(yīng)的主對話框及控件上。因此,需要在Resource資源中添加Bitmap圖片。單擊Resource View面板,右擊Player Resources項,在彈出的菜單中選擇Insert,添加新的Bitmap內(nèi)容。右擊Bitmap,在彈出的菜單中選擇Insert,向工程中添加與控件相對應(yīng)的圖標(biāo)。各圖標(biāo)及其對應(yīng)的控件如表4-8所示。表4-8 對話框IDD_PLAYER_DIALOG各控件對應(yīng)的圖標(biāo)圖標(biāo)類型說明IDB_BITMAPPLAY1IDC_PLAY鼠標(biāo)未單擊控件IDB_BITMAPPLAY3I

52、DC_PLAY鼠標(biāo)單擊控件IDB_BITMAPPAUSEIDC_PLAY暫停播放IDB_BITMAPSTOP1IDC_STOP鼠標(biāo)未單擊控件IDB_BITMAPSTOP3IDC_STOP鼠標(biāo)單擊控件IDB_BITMAPOPEN1IDC_OPEN鼠標(biāo)未單擊控件IDB_BITMAPOPEN3IDC_OPEN鼠標(biāo)單擊控件IDB_BITMAPRP1IDC_RP鼠標(biāo)未單擊控件IDB_BITMAPRP2IDC_RP鼠標(biāo)單擊控件IDB_BITMAPPER1IDC_PER鼠標(biāo)未單擊控件IDB_BITMAPPER2IDC_PER鼠標(biāo)單擊控件IDB_BITMAPNEXT1IDC_NEXT鼠標(biāo)未單擊控件IDB_BI

53、TMAPNEXT2IDC_NEXT鼠標(biāo)單擊控件IDB_BITMAPAIDC_POPList Box控件未展開,鼠標(biāo)未單擊IDB_BITMAPBIDC_POPList Box控件未展開,鼠標(biāo)單擊IDB_BITMAPCIDC_POPList Box控件已展開,鼠標(biāo)未單擊IDB_BITMAPDIDC_POPList Box控件已展開,鼠標(biāo)單擊IDB_BITMAPDEL1IDC_SDEL鼠標(biāo)未單擊控件IDB_BITMAPDEL2IDC_SDEL鼠標(biāo)單擊控件IDB_BITMAPEXIT1IDC_BEXIT鼠標(biāo)未單擊控件IDB_BITMAPEXIT2IDC_BEXIT鼠標(biāo)單擊控件IDB_BITMAPHEL

54、P1IDC_BHELP鼠標(biāo)未單擊控件IDB_BITMAPHELP2IDC_BHELP鼠標(biāo)單擊控件IDB_BITMAPMIM1IDC_BMIM鼠標(biāo)未單擊控件IDB_BITMAPMIM2IDC_BMIM鼠標(biāo)單擊控件IDB_BITMAPBGIDD_PLAYER_DIALOGList Box未展開時的界面背景IDB_BITMAPBG1IDD_PLAYER_DIALOGList Box展開時的界面背景應(yīng)用程序界面中,要使控件表面可以畫上Bitmap,就必須使控件成為CBitMapButton類,因此,在PlayerDlg.h中對各個控件所屬類加以修改并聲明,如下表4-9所示。表4-9 對話框IDD_MCISAMPLE_DIALOG的消息函數(shù)控件變量原來屬的類修改后所屬的類M_playCButtonCBitmapButtonM_stopCButtonCBitmapButtonM_openCButtonCBitmapButtonM_rpCButtonCBitmapButtonM_perCButtonCBitmapButton

溫馨提示

  • 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論