




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
PAGE計算機科學(xué)與工程學(xué)院項目報告設(shè)計名稱:《Windows程序設(shè)計》綜合項目設(shè)計題目:音頻播放器的制作學(xué)生學(xué)號:xxxxxxxxxx專業(yè)班級:xxxxxxxx級xxxxxxxxxx班學(xué)生姓名:xxxxxxxx學(xué)生成績:指導(dǎo)教師(職稱):xxxxxxxxxxxxxx課題工作時間:xxxxxxxxxxxxxxxx課程綜合設(shè)計摘要(中文音頻播放器,是目前用戶選擇播放任意格式的音頻文件的軟件,如酷狗、QQ音樂等。一般的音頻播放器,都可以支持MP3、wave、AU、VOC等文件格式的播放。在此次設(shè)計的音頻播放其中,可以實現(xiàn)對音頻文件的打開、播放、暫停、停止、上一曲/下一曲、歌詞顯示等操作。對于播放器的界面,可以最小化,并顯示到托盤。處于最小化的狀態(tài)下,依然可以對正在播放的文件進(jìn)行上述操作。在此播放器中,最具特點的是在各個操作按鈕以及整個界面上添加了位圖和能將窗口最小化。播放器窗口的建立,也有區(qū)別與傳統(tǒng)的有菜單顯示的窗口。最小化到托盤后,仍可以進(jìn)行操作,也可以選擇退出。對于實現(xiàn)播放、停止、上一曲/下一曲、添加文件,都是利用CMidi這個類來存放實現(xiàn)這些功能的函數(shù)。需要的時候調(diào)用就可以。為了是界面更美觀,讓人看起來更舒服,加入了位圖背景。目前還沒有實現(xiàn)用戶根據(jù)自己的喜好來更改背景圖案。通過這次課程設(shè)計,更加鞏固了我們所學(xué)的知識。課程綜合設(shè)計摘要(英文):Audioplayeristhesoftwarethatuserschoosetoplayanyformatofaudiofiles,suchascooldogs,QQmusicandsoon.GeneralaudioplayercansupportMP3,wave,AU,VOCfileformatplayback.Inthedesignoftheaudioplayswhichcanbeachievedonanaudiofiletoopen,play,pause,stop,previoussong/nextsong,lyricsdisplayandsoon.Interfaceoftheplayercanbeminimized,anddisplayedtothetray.Inminimizedstate,cantheseoperationstothefilewhileitisplaying.Inthisplayer,mostfeaturesareineachactionbuttonandtheinterface,addthebitmapandcanminimizethewindow.Establishmentoftheplayerwindow,therearedifferencesandtraditionalmenudisplaywindow.Minimizetothetray,youcanstilloperate,youcanalsochoosetoexit.Forachievingtheplay,stop,previoussong/nextsong,andaddingfiles,areusingCMidiclasstoholdthesefeaturesfunction.Needtocallwhenyoucan.Inordertointerfacemorebeautifulis,peopleseemmorecomfortable,hasjoinedabitmapbackground.Thereisnouseraccordingtotheirownpreferencestochangethebackgroundpattern.Throughthiscurriculumdesign,furtherconsolidateourknowledge武漢工程大學(xué)計算機科學(xué)與工程學(xué)院綜合設(shè)計報告-PAGE12-武漢工程大學(xué)計算機科學(xué)與工程學(xué)院綜合設(shè)計報告-PAGEI-目錄摘要 IAbstract II第一章課題背景和概述 11.1課題背景 11.1.1音頻播放器簡介 11.1.2目的和意義 11.2課題概述 11.2.1功能簡介 11.2.2主要工作和理論依據(jù) 1第二章設(shè)計簡介及設(shè)計方案論述 32.1需求分析 32.2系統(tǒng)功能及結(jié)構(gòu)簡介 32.2.1系統(tǒng)功能 32.2.2系統(tǒng)結(jié)構(gòu) 3第三章詳細(xì)設(shè)計 43.1界面設(shè)計 43.1.1播放器界面設(shè)計 43.1.2按鈕上的位圖顯示 53.2各模塊功能設(shè)計 63.2.1各按鈕功能的實現(xiàn) 63.2.2最小化到托盤 73.2.3進(jìn)度條顯示 7第四章設(shè)計結(jié)果及分析 84.1運行結(jié)果顯示 84.1.1打開文件并播放 84.1.2最小化 84.1.3歌詞顯示 94.2結(jié)果分析和不足 9總結(jié) 10致謝 11參考文獻(xiàn) 12附錄 13摘要音頻播放器,是目前用戶選擇播放任意格式的音頻文件的軟件,如酷狗、QQ音樂等。一般的音頻播放器,都可以支持MP3、wave、AU、VOC等文件格式的播放。在此次設(shè)計的音頻播放其中,可以實現(xiàn)對音頻文件的打開、播放、暫停、停止、上一曲/下一曲、歌詞顯示等操作。對于播放器的界面,可以最小化,并顯示到托盤。處于最小化的狀態(tài)下,依然可以對正在播放的文件進(jìn)行上述操作。在此播放器中,最具特點的是在各個操作按鈕以及整個界面上添加了位圖和能將窗口最小化。播放器窗口的建立,也有區(qū)別與傳統(tǒng)的有菜單顯示的窗口。最小化到托盤后,仍可以進(jìn)行操作,也可以選擇退出。對于實現(xiàn)播放、停止、上一曲/下一曲、添加文件,都是利用CMidi這個類來存放實現(xiàn)這些功能的函數(shù)。需要的時候調(diào)用就可以。為了是界面更美觀,讓人看起來更舒服,加入了位圖背景。目前還沒有實現(xiàn)用戶根據(jù)自己的喜好來更改背景圖案。通過這次課程設(shè)計,更加鞏固了我們所學(xué)的知識。關(guān)鍵詞:音頻播放器;功能實現(xiàn);窗口界面;程序代碼AbstractAudioplayeristhesoftwarethatuserschoosetoplayanyformatofaudiofiles,suchascooldogs,QQmusicandsoon.GeneralaudioplayercansupportMP3,wave,AU,VOCfileformatplayback.Inthedesignoftheaudioplayswhichcanbeachievedonanaudiofiletoopen,play,pause,stop,previoussong/nextsong,lyricsdisplayandsoon.Interfaceoftheplayercanbeminimized,anddisplayedtothetray.Inminimizedstate,cantheseoperationstothefilewhileitisplaying.Inthisplayer,mostfeaturesareineachactionbuttonandtheinterface,addthebitmapandcanminimizethewindow.Establishmentoftheplayerwindow,therearedifferencesandtraditionalmenudisplaywindow.Minimizetothetray,youcanstilloperate,youcanalsochoosetoexit.Forachievingtheplay,stop,previoussong/nextsong,andaddingfiles,areusingCMidiclasstoholdthesefeaturesfunction.Needtocallwhenyoucan.Inordertointerfacemorebeautifulis,peopleseemmorecomfortable,hasjoinedabitmapbackground.Thereisnouseraccordingtotheirownpreferencestochangethebackgroundpattern.Throughthiscurriculumdesign,furtherconsolidateourknowledge.Keywords:Audioplayer;Features;Windowinterfacecode-PAGE1-第一章課題背景和概述1.1課題背景1.1.1音頻播放器簡介音頻播放器(audioplayer)是一種可儲存、組織與播放音訊檔案格式的裝置。常被稱為“MP3播放器”(因為MP3格式的普遍性),它可以播放很多其他的格式,如WMA,AAC,WAV等。一些格式會跟有限制性的技術(shù)DRM合并,比如Janus和FairPlay,一般是一些付費下載網(wǎng)站的一部分。其它一些格式則是完全的專利自由或者在另外一些方面開放,比如OggVorbis,F(xiàn)LAC,Speex(Ogg開放多媒體工程的所有部分),以及Modulefile格式。1.1.2目的和意義通過獨立設(shè)計完成制作一個播放器軟件,更加理解了MFC單文檔和多文檔程序的構(gòu)成框架,以及各個類之間數(shù)據(jù)傳遞的關(guān)系。同時,對鼠標(biāo)和鍵盤的多消息響應(yīng)有了進(jìn)一步的認(rèn)識。在設(shè)計制作的過程中,C++語言是基礎(chǔ),在熟悉MFCWindows程序設(shè)計的同時,也復(fù)習(xí)了C++程序語言設(shè)計。1.2課題概述1.2.1功能簡介本次設(shè)計完成的播放器軟件,能夠支持播放多種格式的音頻文件,常見的如MP3,WMA,AAC,WAV等。對正在播放的歌曲,可以進(jìn)行暫停、停止的操作,也可以任意添加歌曲并選擇播放。此播放器也可以最小化和最小化到托盤,方便用戶在播放音樂的時候,免受打擾。也可以在最小化到托盤的狀態(tài)下,退出播放器。本次課程設(shè)計,主要是檢驗這一學(xué)期,我們通過對MFCWindows應(yīng)用程序設(shè)計這門課學(xué)習(xí),能夠把所學(xué)的知識應(yīng)用到實際的能力。1.2.2主要工作和理論依據(jù)MFC類庫將所有圖形用戶界面的元素如窗口、菜單和按鈕等都以類的形式進(jìn)行了封裝,MFCAppWizard向?qū)Ц鶕?jù)繼承性利用MFC派生出自己的類,并對Windows應(yīng)用程序進(jìn)行了分解,利用MFC派生類對應(yīng)用程序重新進(jìn)行組裝,同時還規(guī)定了應(yīng)用程序中各個MFC派生類對象之間的相互聯(lián)系,實現(xiàn)了標(biāo)準(zhǔn)Windows應(yīng)用程序的功能,這就是向?qū)傻乃^MFC應(yīng)用程序框架。每個MFC類都包括了一些函數(shù),函數(shù)放到類中,符合C++編程方法。這些函數(shù),必須通過類定義對象才能使用。在本次設(shè)計中,首先,理清課程設(shè)計和編寫程序的思路,明確程序中所要用到的函數(shù),并做好了解。然后,再利用C++類的繼承與派生原理來構(gòu)造所需要的類,編寫實現(xiàn)每項功能的詳細(xì)代碼。利用MFC提供的菜單資源來創(chuàng)建菜單,通過類向?qū)Ы㈩?,函?shù),或者消息響應(yīng),來實現(xiàn)播放器的各種功能。采用不同的Windows提供的坐標(biāo)系統(tǒng)和對話框資源,并利用設(shè)備環(huán)境來繪制和更新圖形,使播放器的界面更加美觀,實現(xiàn)較好的人機交互界面。第二章設(shè)計簡介及設(shè)計方案論述2.1需求分析隨著社會的發(fā)展,有越來越多的人接觸電腦,也有越來越多的人喜歡在上網(wǎng)、工作的時候,播放一點音樂,娛樂一下,緩解一下。所以,應(yīng)運而生的是音頻播放器軟件,能夠為用戶播放常見的格式音頻文件。并且,在使用的過程中,也盡可能設(shè)計出一些人性化的設(shè)計。比如,能最小化到托盤并可以進(jìn)行操作。良好的人機交互界面,也能給人以美好的感官享受。2.2系統(tǒng)功能及結(jié)構(gòu)簡介2.2.1系統(tǒng)功能此音頻播放器可以播放多格式的音頻文件。在播放的時候,需要打開本地的音樂文件,選擇想要打開的文件,點擊播放便可以播放。在播放的過程中,如果有事離開想要停止播放,可以點擊暫停按鈕,等到需要的時候,仍然可以點擊播放,繼續(xù)播放。如果需要退出,點擊關(guān)閉按鈕即可。如果是出于最小化到托盤的狀態(tài),點擊右鍵選擇退出即可。如果想換首歌,點擊下一首或者上一首的按鈕便可以了。對于想詳細(xì)了解歌曲歌詞內(nèi)容,點擊界面上的“歌詞按鈕”,便可以顯示歌詞。為了能夠讓在進(jìn)行其它操作的用戶不受打擾,可以將此播放器最小化到托盤。與此同時,用戶依然能夠通過點擊鼠標(biāo)右鍵進(jìn)行相關(guān)的操作。2.2.2系統(tǒng)結(jié)構(gòu)此播放器編寫的時候,利用的是MFC單文檔程序的構(gòu)成框架,然后再利用Windows提供的資源,運用控件,自己制作了對話框和人機交互界面。在制作界面的同時,也制作了各個按鈕,并完成各個按鈕的消息響應(yīng),便完成響應(yīng)函數(shù)實現(xiàn)了功能。第三章詳細(xì)設(shè)計3.1界面設(shè)計3.1.1播放器界面設(shè)計此播放器的界面是利用控件和位圖的結(jié)合制作出來了。打開VCC++6.0新建一個工程,選擇單文檔。便生成了一個窗口。然后打開ResouceView,點開Dialog,插入Dialog,利用控件,繪制各個按鈕。為了使各個按鈕更加美觀,使用位圖,用自己收集的圖片將各個按鈕覆蓋,最后添加消息響應(yīng)函數(shù),實現(xiàn)各個功能。為了使所引入的位圖能夠和所繪制的窗口能完全吻合,在OnPaint()函數(shù)中,調(diào)用StretchBlt()函數(shù),讓其從源矩形中復(fù)制一個位圖到目標(biāo)矩形,必要時按目前目標(biāo)設(shè)備設(shè)置的模式進(jìn)行圖像的拉伸或壓縮。圖3-1按鈕繪制最后生成的界面比較美觀,給人的感覺很好圖3-3播放器界面3.1.2按鈕上的位圖顯示為對話框添加9個按鈕(Button),在Styles標(biāo)簽中選中Bitmap屬性。將它們的ID分別為IDC_Play,IDC_Stop_BUTTON,IDC_Next_BUTTON,IDC_Pre_BUTTON,IDC_Add_Song,IDC_Delet_Song,IDC_GC_BUTTON,IDC_MinWindow,ID_CloseWindow以實現(xiàn)對文件的各項操作。將5幅準(zhǔn)備好的位圖加入資源,其ID分別設(shè)為IDC_Play,IDC_Stop_BUTTON,IDC_Next_BUTTON,IDC_Pre_BUTTON,IDC_Add_Song,IDC_Delet_Song,IDC_GC_BUTTON,IDC_MinWindow,ID_CloseWindow,分別和5個按鈕相對應(yīng)。然后,在ClassWizard里為每個按鈕分別添加一個CBitmapButton型的變量,分別命名為m_BitmapBtn_Delete;m_BitmapBtn_Stop;m_BitmapBtn_MinWindow;m_BitmapBtn_MaxWindow;m_BitmapBtn_CloseWindow;m_BitmapBtn_NextSong;m_BitmapBtn_UpSong;m_BitmapBtn_paly;m_BitmapBtn_Add;m_BitmapBtn_GC;以對按鈕進(jìn)行操作。圖3-2各個成員函數(shù)和成員變量3.2各模塊功能設(shè)計3.2.1各按鈕功能的實現(xiàn)(1)處理“打開”按鈕單擊“打開”按鈕后,在OnAddSong()函數(shù)中,首先對文件類型進(jìn)行過濾,調(diào)用OpenFiles()函數(shù)打開對話框選擇一個音頻文件,通過InitPath()函數(shù)獲取文件路徑,通過InitPath()函數(shù)獲取文件名后,調(diào)用SaveList()函數(shù)在StaticText控件上顯示你所選擇的歌曲文件名,然后再單擊播放按鈕,便可以播放歌曲。(2)處理“播放”按鈕單擊“播放”按鈕后,在OnPlay()函數(shù)中,通過調(diào)用Midi類中的Open()函數(shù)獲取剛才選擇的文件路徑以及文件名,調(diào)用該類的Midi類中的Play()函數(shù)播放歌曲,此時調(diào)用DisplayInfo()函數(shù)在StaticText控件上顯示正在播放的歌曲,進(jìn)行歌曲的播放,然后利用GetDlgItem()函數(shù)設(shè)置“播放”按鈕不可用。(3)處理“停止”按鈕單擊“停止”按鈕后,在OnStopBUTTON()函數(shù)中,首先通過調(diào)用Midi類的Stop()函數(shù)停止正在播放的歌曲,此時的歌曲處于暫停時的進(jìn)度上,利用GetDlgItem()函數(shù)設(shè)置“播放”按鈕可用。(5)處理“上一曲/下一曲”按鈕單擊“上一曲”按鈕時,在OnNextBUTTON()函數(shù)中,通過調(diào)用Midi類中的Next()函數(shù),停止當(dāng)前播放放的歌曲,并播放當(dāng)前列表中的下一曲?!跋乱磺卑粹o的處理與“上一曲”類似。(6)處理“最小化”按鈕單擊“最小化”按鈕時,在OnMinWindow()函數(shù)中,通過調(diào)用ToTray()函數(shù),將當(dāng)前顯示的窗口最小化,并顯示在任務(wù)欄,在此情況下,仍就可以進(jìn)行上述操作。(7)處理“歌詞”按鈕單擊“歌詞”按鈕時,會在原有的窗口之外再彈出一個窗口,以此來顯示歌詞。這需要在這整個工程中新建一個GECI類,來繪制顯示歌詞的窗口。整個繪制的過程,與界面的設(shè)計是相類似的。(8)處理“關(guān)閉”按鈕單擊“關(guān)閉”按鈕后,在OnCloseWindow()函數(shù)中,調(diào)用CDialog類的OnOK()函數(shù)將退出對話框,結(jié)束程序的運行。3.2.2最小化到托盤單擊“最小化”按鈕時,在OnMinWindow()函數(shù)中,通過調(diào)用ToTray()函數(shù),當(dāng)先窗口會被最小化至托盤。在這個過程中,ToTray()函數(shù)只能實現(xiàn)最小化,并不能實現(xiàn)在最小化的情況下進(jìn)行操作。在最小化至托盤后,要進(jìn)行操作,就定義了一個OnShowTask(WPARAMwParam,LPARAMlParam)的函數(shù),利用if、switch語句進(jìn)行判斷。首先要通過鼠標(biāo)的行為來獲取最小化之后圖標(biāo)的ID。得到響應(yīng)后,單擊右鍵,顯示彈出式menu。menu.AppendMenu(MF_STRING,IDC_Next_BUTTON,"下一曲");menu.AppendMenu(MF_STRING,IDC_Pre_BUTTON,"上一曲");menu.AppendMenu(MF_STRING,IDC_Stop_BUTTON,"停止");menu.AppendMenu(MF_STRING,IDC_Play,"播放|暫停");menu.AppendMenu(MF_STRING,WM_DESTROY,"退出");由此來確定彈出式菜單的位置。點擊后,鼠標(biāo)得到響應(yīng),并執(zhí)行操作。如果想恢復(fù)到原來的窗口,雙擊最小化后任務(wù)欄內(nèi)的圖標(biāo)顯示,鼠標(biāo)由WM_LBUTTONDBLCLK實現(xiàn)雙擊響應(yīng)后,便會回到原來的窗口。在此同時,通過調(diào)用DeleteTray()函數(shù),來刪除任務(wù)欄里最小化后的圖標(biāo)。3.2.3進(jìn)度條顯示進(jìn)度條在前進(jìn)的過程中,其總長度應(yīng)該為歌曲長度。如果想要在一首歌播放完畢后,進(jìn)度條加好走完,必須先利用GetMediaLength(nLength,bProgress)函數(shù)獲取歌曲長度,然后利用UpdatePlayTime(BOOLbProgress)函數(shù)不斷更新歌曲播放的時間,最后通過OnTimer()來實現(xiàn)。第四章設(shè)計結(jié)果及分析4.1運行結(jié)果顯示4.1.1打開文件并播放點擊“添加”按鈕,選擇想要播放的歌曲,所選擇的文件會顯示在“播放列表”中。想要播放哪一首,點擊播放即可。圖4-1打開文件并播放在播放的過程中,依舊存在一些問題。比如,不能通過雙擊歌曲來達(dá)到播放的目的。如果想完成“上一曲/下一曲”的操作,在添加歌曲文件的時候,必須是一次性的添加多首歌曲。如果每次只添加一首,添加多次,便不能完成歌曲之間的更換。4.1.2最小化當(dāng)需要最小化是,點擊最小化按鈕,窗口將自動最小化到托盤。圖4-3最小化到托盤最小化時,單擊右鍵會出現(xiàn)如圖所示的菜單。單擊菜單中的選項,也可以完成操作。4.1.3歌詞顯示點擊“歌詞”按鈕時,會彈出另一個窗口來顯示歌詞。由于沒有導(dǎo)入歌詞文本,所以歌詞內(nèi)容無法顯示。圖4-4歌詞顯示4.2結(jié)果分析和不足雖然說這次的設(shè)計結(jié)果,從表面上看來,基本功能是實現(xiàn)了。但依舊還是存在很多不足。最突出的就是進(jìn)度條的問題。進(jìn)度條在前進(jìn)的過程中,其總長度應(yīng)該為歌曲長度。如果想要在一首歌播放完畢后,進(jìn)度條加好走完,必須先利用GetMediaLength(nLength,bProgress)函數(shù)獲取歌曲長度,然后利用UpdatePlayTime(BOOLbProgress)函數(shù)不斷更新歌曲播放的時間,最后通過OnTimer()來實現(xiàn)。但是在設(shè)計的過程中,編譯和連接都沒有錯誤,卻不能運行處預(yù)料的結(jié)果,還有明顯的錯誤。在網(wǎng)上查閱資料的過程中,也沒有找到解決的辦法??偨Y(jié)這一次的課程設(shè)計,對我個人來說是相當(dāng)有難度的。在設(shè)計的過程中,有很多問題不是很清楚,所以走起來就很困難。有時候在遇到問題的時候,基本知識都了解,但是不知道怎么把他們整合起來,知識沒有形成系統(tǒng),都是很零散的東西。而且,由于以前的基礎(chǔ)知識不夠牢固,是的我在這次課程設(shè)計中感到更加的困難。在設(shè)計的過程中,每走一步就會發(fā)現(xiàn),思路想出來很容易,但涉及到實現(xiàn)的時候,總是有點手足無措。對于我的這次課程設(shè)計,里面還有很多要改進(jìn)的地方。在播放器的界面上雖然有音量的調(diào)節(jié),但是沒有有真正的實現(xiàn);歌詞的具體內(nèi)容額沒有關(guān)聯(lián)上來。當(dāng)然一個程序的順利出爐,少不了的就是反復(fù)的調(diào)試和更改。在調(diào)試的過程中,總會發(fā)現(xiàn)很多錯誤,在解決這些錯誤的同時,開始很模糊的概念,就會越來越清晰。其實有很多錯誤都是很類似的,只要解決了一個,其他的也就迎刃而解了。其實,這一個程序的完成,并不是我一個人的功勞。有很多不懂的地方就會向別人請教,同學(xué)之間的相互幫助,確實能夠解決很多問題。致謝特別感謝MFCWindows應(yīng)用程序設(shè)計老師的悉心指教和幫助,特別是在上課時候的細(xì)心講解和實驗過程中詳細(xì)的演示,讓我更加清楚的了解了各個知識點的運用。通過這一次的課程設(shè)計,讓我學(xué)到了更多的知識,也把以前掌握不熟練的知識,能更加靈活地運用了。謝謝!參考文獻(xiàn)[1]姬濤、周啟生,《計算機程序設(shè)計基礎(chǔ)(上冊)》[Z],北京:中國傳媒大學(xué)出版社,2010[2]譚浩強,《C程序設(shè)計教程》[Z],北京:清華大學(xué)出版社,2007[3]任哲,《MFCWindows應(yīng)用程序設(shè)計(第二版)》[Z],北京:清華大學(xué)出版社,2007附錄1.1Cmidi類中的函數(shù)//Midi.cpp#include"stdafx.h"#include"Midi.h"CMidi::CMidi(){ m_totalFiles=0; fr=0; cdfrom=0; m_MusicFilePath=""; PlayingFalg=false; Ispause=false;}CMidi::~CMidi(){}//播放boolCMidi::Play(){if(PlayingFalg)//正在播放則暫停 Pause(); else { if(Ispause) { mciSendCommand(m_count,MCI_RESUME,0,NULL); PlayingFalg=true; Ispause=false; } else { PlayingFalg=true;//標(biāo)志為正在播放 MCI_OPEN_PARMSmciopenparms;//打開 MCI_PLAY_PARMSmciplayparms;//播放 //以下用fr做下標(biāo),能在停止再播放時恢復(fù)上次的位置 mciopenparms.lpstrElementName=m_FileList[fr];//播放路徑 mciopenparms.lpstrDeviceType=NULL;//文件類型為NULL,就可以支持全部類型 mciSendCommand(0,MCI_OPEN,MCI_DEVTYPE_WAVEFORM_AUDIO, (DWORD)(LPVOID)&mciopenparms);//向MCI設(shè)備發(fā)送命令消息 m_count=mciopenparms.wDeviceID; mciplayparms.dwCallback=NULL;//窗口擁有者句柄 cdlen=getinfo(MCI_STATUS_LENGTH);//得到曲目長度 cdto=MCI_MAKE_HMS(MCI_HMS_HOUR(cdlen),MCI_HMS_MINUTE(cdlen), MCI_HMS_SECOND(cdlen));//根據(jù)長度計算出時、分、秒 mciplayparms.dwFrom=MCI_MAKE_HMS(0,0,0);//表示從哪兒開始播放吧 mciplayparms.dwTo=cdto;//表示放到哪兒為止 mciSendCommand(m_count,MCI_PLAY,MCI_TO|MCI_FROM, (DWORD)(LPVOID)&mciplayparms); //發(fā)送播放消息 } } returntrue;}//獲取歌曲信息(長度,已播放長度)DWORDCMidi::getinfo(DWORDitem){ MCI_STATUS_PARMSmcistatusparms; mcistatusparms.dwCallback=NULL;/* //接受傳入的命令參數(shù),這是關(guān)鍵。命令參數(shù)如下:獲取歌曲長度:MCI_STATUS_LENGTH獲取當(dāng)前已播放的長度:MCI_STATUS_POSITION*/ mcistatusparms.dwItem=item;//接受命令參數(shù)的地方 mcistatusparms.dwReturn=0;//返回值 mciSendCommand(m_count,MCI_STATUS,MCI_STATUS_ITEM,(DWORD)&mcistatusparms); returnmcistatusparms.dwReturn;}//停止voidCMidi::Stop(){ PlayingFalg=false;//關(guān)閉正在播放標(biāo)志 cdfrom=MCI_MAKE_HMS(0,0,0);//播放位置歸文件開頭 mciSendCommand(m_count,MCI_CLOSE,0,NULL);//發(fā)出關(guān)閉消息 m_count=0;}//下一首voidCMidi::Next(){ if(fr>=0) { fr++; if(fr>=m_totalFiles) { //讓fr指向下一個音樂文件,fr是從0下標(biāo)開始 //m_totalFiles為總文件數(shù) fr=0; } Stop(); Play(); }}//上一首voidCMidi::Per(){ if(fr>=0) { fr--; if(fr==-1) {//指向最后一首歌,但fr是從0下標(biāo)開始的,而m_totalFiles是從1開始 fr=m_totalFiles-1; } Stop(); Play();//播放fr指向的位置 }}//保存曲目列表boolCMidi::SaveList(){ CFilefileList;//文件對象 if(!fileList.Open(m_MusicFilePath,CFile::modeCreate|CFile::modeWrite)) returnFALSE;//打開文件,不存在則創(chuàng)建,寫文件 charfileName[256]; for(inti=0;i<m_totalFiles;i++) {//m_totalFiles為打開對話框中獲取的歌曲總數(shù) strcpy(fileName,m_FileList[i]);//取出一條曲目路徑 fileList.Write(fileName,strlen(fileName));//寫入文件 fileList.Write("\r\n",2);//寫入一行結(jié)束和換行符 } fileList.Write("",4);//寫入文件最后標(biāo)志 fileList.Close();//關(guān)閉文件 returnTRUE;}//讀取曲目路徑列表boolCMidi::OpenList(){ CFilefileList; if(!fileList.Open(m_MusicFilePath,CFile::modeNoTruncate|CFile::modeRead)) returnFALSE;//以只讀模式打開,不覆蓋原有文件,m_MusicFilePath為列表文件的路徑 charch; while(1) { CStringfileName; fileList.Read(&ch,1);//讀入一個字符 if(ch=='-')break;//如文件是最后返回,-是文件最后的標(biāo)志 fileName+=ch;//否則存入 while(1) {//讀入一行 fileList.Read(&ch,1); if(ch=='\r') {//這兒可以判斷是一行了 m_totalFiles++;//曲目首數(shù)計數(shù) fileList.Read(&ch,1); break; } fileName+=ch; }//下面這句把路徑加入列表中,用字符串?dāng)?shù)組代替 //m_totalFiles前面已經(jīng)加一了,所以這兒要少一個 m_FileList[m_totalFiles-1]=fileName; } fileList.Close(); returnTRUE;}//打開對話框,獲取曲目列表boolCMidi::OpenFiles(){ CFileDialogf(true);//打開對話框?qū)ο?f.m_ofn.Flags|=512;//OFN_ALLOWMULTISELECT;目錄列表方式 f.m_ofn.lpstrFilter="所有媒體類型\0*.*\0\0"; if(f.DoModal()!=IDOK) returnFALSE;//用戶單擊了“取消” POSITIONpos=f.GetStartPosition();//獲取第一個文件位置 inti=0; while(pos) { m_FileList[i]=f.GetNextPathName(pos);//讀取文件到曲目路徑列表 i++; } m_totalFiles=i;//保存曲目總數(shù) Stop(); if(PlayingFalg) Stop(); //Play();//播放打開的文件 returnTRUE;}//獲得播放列表文件的路徑boolCMidi::InitPath(){//初始化路徑,取得播放曲目列表文件的全路徑 TCHARpath[256];//保存文件路徑 GetModuleFileName(NULL,path,sizeof(path));//獲取當(dāng)前程序路徑 TCHAR*p=_tcsrchr(path,_T('\\'));//查找最后一個'\\'字符 if(p) lstrcpy(p,_T("\\MPlayer.mdr"));//替換成要查找的完整路徑 m_MusicFilePath=path;//保存到路徑變量中,以便用它來打開列表文件 returntrue;}//循環(huán)播放voidCMidi::OnTimer(){//循環(huán)播放 if(getinfo(MCI_STATUS_POSITION)==cdlen){//如當(dāng)前播放的長度等于歌曲的長度,說明已經(jīng)播放完畢 Next();//指向下一首 }}//暫停播放voidCMidi::Pause(){ PlayingFalg=false;//關(guān)閉正在播放標(biāo)志 mciSendCommand(m_count,MCI_PAUSE,0,NULL); Ispause=true;}1.2最小化的相關(guān)操作/////////////////////////////////////最小化到托盤開始///////////////////voidCMy2009Dlg::ToTray(){ NOTIFYICONDATAnid; nid.cbSize=(DWORD)sizeof(NOTIFYICONDATA); nid.hWnd=this->m_hWnd; nid.uID=IDR_MAINFRAME; nid.uFlags=NIF_ICON|NIF_MESSAGE|NIF_TIP; nid.uCallbackMessage=WM_SHOWTASK;//自定義的消息名稱 nid.hIcon=LoadIcon(AfxGetInstanceHandle(),MAKEINTRESOURCE(IDR_MAINFRAME)); strcpy(nid.szTip,"v2009音頻播放器");//信息提示條 Shell_NotifyIcon(NIM_ADD,&nid);//在托盤區(qū)添加圖標(biāo) ShowWindow(SW_HIDE);//隱藏主窗口}/////////
溫馨提示
- 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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 第3課 “開元盛世”教案2024-2025學(xué)年七年級歷史下冊新課標(biāo)
- 煙道伸縮節(jié)施工方案
- 2025年醫(yī)藥產(chǎn)業(yè)布局洞察:數(shù)據(jù)解析A股市場走勢與板塊表現(xiàn)
- 2025年鋼鐵渣行業(yè)發(fā)展現(xiàn)狀分析:我國鋼鐵渣產(chǎn)量約為1.53億噸
- 熱力管線施工方案
- 河南省許昌市2024-2025學(xué)年高二上學(xué)期1月期末英語試題【含答案】
- 聚氨酯地坪施工方案范本
- 混凝土蓋板溝施工方案
- 2025年永輝知云考試題及答案
- 2025年化礦檢驗考試題及答案
- 三調(diào)土地利用現(xiàn)狀分類和三大地類對應(yīng)甄選
- 房地產(chǎn)合約規(guī)劃分類明細(xì)
- 八年級物理(上冊)知識點整理 (2)
- 新冀人版小學(xué)科學(xué)三年級下冊全冊教案(2022年春修訂)
- 高中物理萬有引力定律知識點總結(jié)與典型例題
- 吊裝平臺施工方案
- 歐姆定律-中考復(fù)習(xí)課件
- 中學(xué)語文課程標(biāo)準(zhǔn)研究最新試題及答
- 粱、柱、板截面取值原則最終
- 如何激發(fā)學(xué)生學(xué)習(xí)物理的興趣PPT課件
- CRH2 第5章 轉(zhuǎn)向架
評論
0/150
提交評論