版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、<p> 綜合程序 課程設(shè)計(jì)說明書</p><p> 課程設(shè)計(jì)名稱: 綜合程序課程設(shè)計(jì) </p><p> 課程設(shè)計(jì)題目: 音頻播放程序的設(shè)計(jì)與實(shí)現(xiàn) </p><p> 學(xué) 院 名 稱: 信息工程學(xué)院 </p><p> 專業(yè):電子信息工程
2、 班級(jí): </p><p> 學(xué)號(hào): 姓名: </p><p> 評(píng)分: 教師: </p><p> 20 12 年 月 日</p><p> 綜合程序 課程設(shè)計(jì)任務(wù)書&l
3、t;/p><p> 20 14 -20 15學(xué)年 第 2 學(xué)期 第 1 周- 2周 </p><p> 注:1、此表一組一表二份,課程設(shè)計(jì)小組組長一份;任課教師授課時(shí)自帶一份備查。</p><p> 2、課程設(shè)計(jì)結(jié)束后與“課程設(shè)計(jì)小結(jié)”、“學(xué)生成績單”一并交院教務(wù)存檔。</p><p><b> 摘要</b>&l
4、t;/p><p> 隨著現(xiàn)今科學(xué)技術(shù)的發(fā)展,人們生活水平的提高,娛樂已必不可少,人們通過音樂陶冶情操,放松自己,這大大促進(jìn)了媒體軟件的發(fā)展.而mp3作為一種小巧,具有良好的音頻解碼能力,成為了最為廣泛使用的音頻格式。而軟件市場(chǎng)的媒體播放器有很多,如酷狗音樂。目前常見的多媒體軟件應(yīng)該說各有特色,但是幾乎每一個(gè)都存在著不如人意的地方。本課程設(shè)計(jì)所做的的播放器是基于MFC集成開發(fā)環(huán)境,利用系統(tǒng)的MCI(media
5、0;controller interface)命令接口來編程,具有體積小,支持的播放格式多、系統(tǒng)資源占用少、支持播放列表編輯。</p><p> 了解播放器的功能實(shí)現(xiàn),掌握播放器開發(fā)的相關(guān)技術(shù),同時(shí)利用軟件工程的相關(guān)理論知識(shí),了解軟件開發(fā)的方法與步驟</p><p> 關(guān)鍵字:音樂,MCI,播放器</p><p><b> 目錄</b
6、></p><p> 一 引言--------------------------------------------------------------------6</p><p> 1.1 MFC簡介-------------------------------------------------------------6</p><p> 1.2
7、 MCI簡介--------------------------------------------------------------6</p><p> 二 課程設(shè)計(jì)的目的與要求----------------------------------------------7</p><p> 2.1 目的----------------------------------------
8、-----------------------------7</p><p> 2.2 任務(wù)----------------------------------------------------------------------7</p><p> 三 課題的需求分析----------------------------------------------------------
9、7</p><p> 3.1 播放器的基本控制需求----------------------------------------7</p><p> 3.2 功能需求------------------------------------------------------------8</p><p> 四 概要設(shè)計(jì)--------------------
10、--------------------------------------------8</p><p> 五 詳細(xì)設(shè)計(jì)---------------------------------------------------------------9</p><p> 六 調(diào)試與測(cè)試分析--------------------------------------------------
11、--10</p><p> 七 用戶手冊(cè)--------------------------------------------------------------11</p><p> 八 結(jié)論---------------------------------------------------------------------11</p><p> 九
12、參考文獻(xiàn)--------------------------------------------------------------12</p><p> 十 附錄---------------------------------------------------------------------13</p><p><b> 正文</b></p>
13、<p><b> 一.引言</b></p><p> MP3播放器的設(shè)計(jì)是利用MFC應(yīng)用程序、媒體控制接口MIC的基本知識(shí)而設(shè)計(jì)的。</p><p><b> 1.1 MFC簡介</b></p><p> MFC是Visual C++是核心。MFC(MicrosoftFoundationClasses
14、)是微軟基礎(chǔ)類庫的簡稱,是微軟公司實(shí)現(xiàn)的一個(gè)c++類庫, MFC類庫將所有圖形用戶界面的元素如窗口、菜單和按鈕等都以類的形式進(jìn)行了封裝,MFC AppWizard向?qū)Ц鶕?jù)繼承性利用MFC派生出自己的類,并對(duì)Windows應(yīng)用程序進(jìn)行了分解,利用MFC派生類對(duì)應(yīng)用程序重新進(jìn)行組裝,同時(shí)還規(guī)定了應(yīng)用程序中各個(gè)MFC派生類對(duì)象之間的相互聯(lián)系,實(shí)現(xiàn)了標(biāo)準(zhǔn)Windows應(yīng)用程序的功能,這就是向?qū)傻乃^MFC應(yīng)用程序框架。這樣就可以專心的考慮程
15、序的邏輯,而不是這些每次編程都要重復(fù)的東西。</p><p><b> 1.2 MCI簡介</b></p><p> MCI是一種接口,MCI是我們只需要使用MCI函數(shù)而不必考慮具體的多媒體設(shè)備,它的好處是可以方便地控制絕大多數(shù)多媒體設(shè)備包括音頻、視頻、影碟、錄像等多媒體設(shè)備,而不需要知道它們的內(nèi)部工作狀況。它所支持的媒體格式包括mp3、avi、wav、mpeg等
16、等[2]。這樣程序員不再需要關(guān)心具體設(shè)備的差異,就可以對(duì)激光唱機(jī)(CD)、視盤機(jī)、波形音頻設(shè)備、視頻播放設(shè)備和MIDI設(shè)備等媒體設(shè)備進(jìn)行控制。應(yīng)用程序通過MCI發(fā)送相應(yīng)的命令來控制媒體設(shè)備。MCI分為命令字符串和命令消息兩種,兩者具有類似的功能。命令字符串具有使用簡單的特點(diǎn),但是它的執(zhí)行效率略低于命令消息。</p><p> 二.課程設(shè)計(jì)的目的與要求</p><p><b>
17、 2.1 目的</b></p><p> 利用VC++開發(fā)一個(gè)支持wav、mp3、wma等不同音頻格式的媒體播放器。通過課程設(shè)計(jì)掌握多媒體編程的基本原理。</p><p><b> 2.2 任務(wù)</b></p><p> 編程實(shí)現(xiàn)一個(gè)可支持多種音頻格式的媒體播放器,其基本功能包括媒體播放、音量調(diào)節(jié)、播放進(jìn)度選擇、暫停、停止以及
18、歌曲信息的查詢與添加等;</p><p> 給出程序的總體設(shè)計(jì)和詳細(xì)設(shè)計(jì),要求程序總體架構(gòu)圖、詳細(xì)設(shè)計(jì)的流程圖,函數(shù)、變量說明等</p><p> 給出程序運(yùn)行、測(cè)試的詳細(xì)結(jié)果。</p><p> 三.課題的需求分析(數(shù)據(jù)流圖、數(shù)據(jù)字典)</p><p> 分析軟件設(shè)計(jì)的目標(biāo)和任務(wù),確定軟件功能和性能需求。</p>&l
19、t;p> 軟件需求是指用戶對(duì)目標(biāo)軟件系統(tǒng)在功能、性能、行為、設(shè)計(jì)約束等方面的期望。需求分析就是通過對(duì)應(yīng)用問題及其壞境的分析與理解采用一系列的分析方法和技術(shù)將用戶的需求逐步精確化、完全化、一致化,最終形成需求規(guī)模說明文檔的過程。</p><p> 3.1 播放器的基本控制需求</p><p> 在著手開發(fā)系統(tǒng)之前首先要明確該系統(tǒng)應(yīng)該實(shí)現(xiàn)的一些最基本的功能,然后逐步細(xì)化,為每個(gè)功能
20、創(chuàng)建一個(gè)模塊,再對(duì)各個(gè)模塊進(jìn)行開發(fā)。通過分析我們得出一款音樂播放器的基本控制如圖(1)所示:</p><p> 圖(1):音樂的基本控制</p><p><b> 3.2 功能需求</b></p><p> 功能需求規(guī)定開發(fā)人員必須在產(chǎn)品中實(shí)現(xiàn)的軟件功能,用戶利用這些功能來完成任務(wù),滿足業(yè)務(wù)需求。功能需求有時(shí)也被稱作行為需求 (behav
21、ioral requirement),因?yàn)榱?xí)慣上總是用“應(yīng)該”對(duì)其進(jìn)行描述。功能需求描述開發(fā)人員需要實(shí)現(xiàn)什么。</p><p> 本次課程設(shè)計(jì)要求當(dāng)用戶啟動(dòng)程序進(jìn)入主界面,用戶可以通過添加模塊添加本地歌曲。通過播放列表用戶可以實(shí)現(xiàn)對(duì)歌曲的查找、播放、暫停、音量調(diào)節(jié)、靜音。通過總結(jié)我們知道其功能模塊時(shí)序圖如下圖(2)所示:</p><p> 圖(2):音頻播放器的功能需求</p&g
22、t;<p> 四.概要設(shè)計(jì)(系統(tǒng)層次結(jié)構(gòu)圖)</p><p> 概要設(shè)計(jì)定義軟件各主要成份之間的關(guān)系。</p><p> 在需求明確、準(zhǔn)備開始編碼之前,要做概要設(shè)計(jì)。設(shè)計(jì)軟件結(jié)構(gòu)的具體任務(wù)是:將一個(gè)復(fù)雜系統(tǒng)按功能進(jìn)行模塊劃分、建立模塊的層次結(jié)構(gòu)及調(diào)用關(guān)系、確定模塊間的接口及人機(jī)界面等。數(shù)據(jù)結(jié)構(gòu)設(shè)計(jì)包括數(shù)據(jù)特征的描述、確定數(shù)據(jù)的結(jié)構(gòu)特性、以及數(shù)據(jù)庫的設(shè)計(jì)。本程序采用模塊化
23、軟件設(shè)計(jì),自頂向下逐層把軟件系統(tǒng)劃分成若干模塊。每個(gè)模塊完成一個(gè)特定的功能,最后將所有模塊按照某種方法組合成一個(gè)整體,達(dá)到整個(gè)播放器所要求的功能。本次課程設(shè)計(jì)的系統(tǒng)結(jié)構(gòu)圖如圖(3)所示。 </p><p> 圖(3):系統(tǒng)的層次結(jié)構(gòu)圖</p><p> 五.詳細(xì)設(shè)計(jì)(程序流程圖)</p><p> 把軟件系統(tǒng)結(jié)構(gòu)成份轉(zhuǎn)換成軟件的過程性描述(算法),用程序流程圖
24、詳述主要事件的實(shí)現(xiàn)過程。然后進(jìn)行編碼-----根據(jù)這種過程性描述,編寫核心源代碼。</p><p> 本次課程設(shè)計(jì)所做音頻播放器不僅要實(shí)現(xiàn)對(duì)一些常見的音頻格式文件的播放,而且還要有友好的用戶界面。其設(shè)計(jì)目標(biāo)是:實(shí)現(xiàn)對(duì)多種音頻格式文件的播放,當(dāng)前播放曲目長度顯示,實(shí)現(xiàn)音量控制;播放器軟件占用系統(tǒng)資源少、運(yùn)行平臺(tái)要求不高、界面美觀舒適、操作簡單。</p><p> 主要?jiǎng)澐譃橐韵?個(gè)功能模
25、塊,每個(gè)功能模塊的作用描述如下:</p><p> 播放控制:控制歌曲的播放狀態(tài),如:播放、暫停、上一曲、下一曲。播放過的歌曲按播放順序排列在播放列表中,每次退出程序、重啟播放器后播放列表中的播放記錄會(huì)自動(dòng)保存不會(huì)清空。</p><p> 文件控制:主要用來打開本地播放文件。本音樂播放器支持常見音頻格式文件播放如:MP3、WMA、WAV等。還有對(duì)播放列表進(jìn)行控制如:打開文件所在目錄、移
26、除列表、刪除文件。</p><p> 進(jìn)度控制:顯示當(dāng)前歌曲的播放總時(shí)長和已播放時(shí)長,可以通過鼠標(biāo)調(diào)整歌曲的播放進(jìn)度,實(shí)現(xiàn)歌曲的跳躍式播放。其實(shí)現(xiàn)方式是通過進(jìn)度條和時(shí)間的同步顯示。</p><p> 聲音控制:調(diào)整歌曲音量的大小。</p><p><b> 界面布局設(shè)計(jì)</b></p><p> (1) 創(chuàng)建一個(gè)
27、對(duì)話框類,類名為CMPlayerDlg。</p><p> (2) 向?qū)υ捒蛑刑砑覩roup Box控件、Static Text控件以及按鈕控件。</p><p> (3) 設(shè)置所添加的控件的屬性。</p><p> 系統(tǒng)界面的運(yùn)行結(jié)果如圖(4)所示。</p><p> 圖(4):系統(tǒng)界面的運(yùn)行結(jié)果圖</p><p
28、><b> 六.調(diào)試及測(cè)試分析</b></p><p> 在課程設(shè)計(jì)中,常常遇到許許多多的問題,例如有些非控件變量的聲明,這經(jīng)常導(dǎo)致程序運(yùn)行錯(cuò)誤。這就要在變量聲明處重新聲明變量,調(diào)試過程中要經(jīng)常使用在錯(cuò)誤區(qū)域設(shè)置斷點(diǎn)的方法來看看是否是是這段程序出了問題而不是,別的方面。</p><p><b> 七.用戶手冊(cè)</b></p>
29、;<p> 本次課設(shè)所設(shè)計(jì)的程序簡單,易用,跟大多數(shù)音頻軟件一樣。在啟動(dòng)程序是需要按添加音樂按鈕添加自己喜歡的音樂,然后選擇相應(yīng)的歌曲,模式,點(diǎn)擊播放,美妙的音樂就噴薄而出了,在主界面還可以進(jìn)行跳躍式聽歌,音量控制等各種操作。簡而言之此款軟件操作簡單,集小巧,易用于一身。</p><p><b> 八.結(jié)論</b></p><p> 經(jīng)過為期兩周的
30、綜合程序課程設(shè)計(jì),我學(xué)到了很多。我對(duì)VC++這門課程有了更深刻的認(rèn)識(shí),對(duì)用MFC創(chuàng)建基于對(duì)話框的應(yīng)用程序更加熟悉,同時(shí)了解了MCI相關(guān)知識(shí)。</p><p> 本次課程設(shè)計(jì)中雖然可以實(shí)現(xiàn)播放、暫停、停止、播放界面美化以及音量等功能,但仍然存在著放多不足,添加音樂列表后再次啟動(dòng)不能保留數(shù)據(jù)。</p><p> 課設(shè)中遇到了許多的困難,課設(shè)中第一次調(diào)試程序時(shí)出現(xiàn)了很多錯(cuò)誤,其中有邏輯錯(cuò)誤,
31、編譯能通過,運(yùn)行始終無法通過,后來經(jīng)過思考,進(jìn)行了多次修改調(diào)試之后得到了運(yùn)行結(jié)果;但還是存在兼容性問題,系統(tǒng)版本以及軟件的版本之間存在各種兼容性問題,這使我不知從何處檢查并改進(jìn),后來在老師的幫助下,意識(shí)到可能是兼容性的問題,結(jié)果換了臺(tái)電腦,經(jīng)過改正調(diào)試最終達(dá)到了目的。諸如此類的問題數(shù)不勝數(shù),不過經(jīng)過查詢資料,咨詢老師,與同學(xué)探討最終完成了這次課設(shè),成功的做出了音頻播放器。</p><p> “書到用時(shí)方恨少”,
32、只是到要用的時(shí)候,才會(huì)覺得這句話是真理。以前玩的時(shí)候不覺得,只有真正做事時(shí),抓耳撓腮時(shí)才會(huì)覺得以前學(xué)的不夠好。雖然在設(shè)計(jì)的過程中,時(shí)常會(huì)碰到問題,有時(shí)是從網(wǎng)上搜索出解決方法,但是往往大多數(shù)百度也不能找到有效的解決辦法,這種時(shí)候,向同學(xué)老師請(qǐng)教,就會(huì)讓自己受益很多。 跟老師和同學(xué)的交流使我認(rèn)識(shí)的自己的更多不足,這些都是值得我改進(jìn)的。</p><p> 總的說來,此次軟件設(shè)計(jì),讓我深刻認(rèn)識(shí)的不足,以后會(huì)更
33、加努力。</p><p><b> 參考文獻(xiàn)</b></p><p> [1] 黃維通.Visual C++面向?qū)ο缶幊探坛?第三版.北京:清華大學(xué)出版社,2011</p><p> [2] 侯俊杰.深入淺出MFC.第2版.廣東:南方出版社,2007</p><p> [3] 嚴(yán)華峰等.Visual C++課程設(shè)
34、計(jì)案例精編.北京:中國水利水電出版社,2004</p><p> [4] 王維玉等.Visual C++高級(jí)編程技術(shù)精粹.北京:科學(xué)出版社,2008</p><p> [5]陳國建等.Visual C++范例開發(fā)大全.北京:清華大學(xué)出版社,2010</p><p><b> 九.附錄</b></p><p><
35、;b> 初始化程序</b></p><p> // MPlayerDlg.cpp : 實(shí)現(xiàn)文件</p><p><b> //</b></p><p> #include "stdafx.h"</p><p> #include "MPlayer.h"&
36、lt;/p><p> #include "MPlayerDlg.h"</p><p> #include "afxdialogex.h"</p><p> #ifdef _DEBUG</p><p> #define new DEBUG_NEW</p><p><b&g
37、t; #endif</b></p><p> // CMPlayerDlg 對(duì)話框</p><p> CMPlayerDlg::CMPlayerDlg(CWnd* pParent /*=NULL*/)</p><p> : CDialogEx(CMPlayerDlg::IDD, pParent)</p><p><b
38、> {</b></p><p> m_hIcon = AfxGetApp()->LoadIcon(MAKEINTRESOURCE(IDI_ICON));</p><p><b> hour=0;</b></p><p><b> minute=0;</b></p><p&
39、gt;<b> second=0;</b></p><p><b> cs=0;</b></p><p><b> ch=0;</b></p><p><b> cm=0;</b></p><p> mode=SINGLE;</p>
40、<p><b> }</b></p><p> void CMPlayerDlg::DoDataExchange(CDataExchange* pDX)</p><p><b> {</b></p><p> CDialogEx::DoDataExchange(pDX);</p><
41、p> DDX_Control(pDX, IDC_LIST, list);</p><p> DDX_Control(pDX, IDC_SLIDER_VOL, vol);</p><p> DDX_Control(pDX, IDC_SLIDER_TIME, process);</p><p><b> }</b></p>
42、<p> BEGIN_MESSAGE_MAP(CMPlayerDlg, CDialogEx)</p><p> ON_WM_PAINT()</p><p> ON_WM_QUERYDRAGICON()</p><p> ON_WM_ERASEBKGND()</p><p> ON_LBN_SELCHANGE(IDC_L
43、IST, &CMPlayerDlg::OnLbnSelchangeList)</p><p> ON_BN_CLICKED(IDC_PLAY, &CMPlayerDlg::OnBnClickedPlay)</p><p> ON_BN_CLICKED(IDC_ADD, &CMPlayerDlg::OnBnClickedAdd)</p><p&
44、gt; ON_BN_CLICKED(IDC_PAUSE, &CMPlayerDlg::OnBnClickedPause)</p><p> ON_BN_CLICKED(IDC_STOP, &CMPlayerDlg::OnBnClickedStop)</p><p> ON_BN_CLICKED(IDC_DELETE, &CMPlayerDlg::OnBnCli
45、ckedDelete)</p><p> ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_VOL, &CMPlayerDlg::OnCustomdrawSliderVol)</p><p> ON_NOTIFY(NM_CUSTOMDRAW, IDC_SLIDER_TIME, &CMPlayerDlg::OnCustomdrawSliderTime
46、)</p><p> ON_WM_TIMER()</p><p> ON_NOTIFY(NM_RELEASEDCAPTURE, IDC_SLIDER_TIME, &CMPlayerDlg::OnReleasedcaptureSliderTime)</p><p> ON_BN_CLICKED(IDC_BTN_NEXT, &CMPlayerDlg
47、::OnBnClickedBtnNext)</p><p> ON_BN_CLICKED(IDC_BTN_BACK, &CMPlayerDlg::OnBnClickedBtnBack)</p><p> ON_LBN_DBLCLK(IDC_LIST, &CMPlayerDlg::OnDblclkList)</p><p> ON_BN_CLIC
48、KED(IDC_BTN_MODE, &CMPlayerDlg::OnBnClickedBtnMode)</p><p> END_MESSAGE_MAP()</p><p> // CMPlayerDlg 消息處理程序</p><p> BOOL CMPlayerDlg::OnInitDialog()</p><p><b
49、> {</b></p><p> CDialogEx::OnInitDialog();</p><p> // 設(shè)置此對(duì)話框的圖標(biāo)。當(dāng)應(yīng)用程序主窗口不是對(duì)話框時(shí),框架將自動(dòng)</p><p><b> // 執(zhí)行此操作</b></p><p> SetIcon(m_hIcon, TRUE);
50、// 設(shè)置大圖標(biāo)</p><p> SetIcon(m_hIcon, FALSE);// 設(shè)置小圖標(biāo)</p><p> // TODO: 在此添加額外的初始化代碼</p><p> process.SetRange(0,100);</p><p> vol.SetRange(0,1000);</p><p&
51、gt; vol.SetPos(vol.GetRangeMax());</p><p> CString temp;</p><p> temp.Format(" %d:%d:%d / %d:%d:%d",ch,cm,cs,hour,minute,second);</p><p> SetDlgItemText(IDC_STATIC_TIM
52、E,temp);</p><p> return TRUE; // 除非將焦點(diǎn)設(shè)置到控件,否則返回 TRUE</p><p><b> }</b></p><p> // 如果向?qū)υ捒蛱砑幼钚』粹o,則需要下面的代碼</p><p> // 來繪制該圖標(biāo)。對(duì)于使用文檔/視圖模型的 MFC 應(yīng)用程序,</
53、p><p> // 這將由框架自動(dòng)完成。</p><p><b> 播放程序</b></p><p> void CMPlayerDlg::OnBnClickedPlay()</p><p><b> {</b></p><p> CString temp;</
54、p><p> GetDlgItemText(IDC_PAUSE,temp);</p><p> if(temp.Compare("繼續(xù)播放")==0)</p><p><b> {</b></p><p> SetDlgItemText(IDC_PAUSE,"暫停");<
55、/p><p><b> }</b></p><p> CString filename;</p><p> int index=list.GetCurSel();</p><p> if(index==-1)</p><p><b> {</b></p>
56、<p> MessageBox("請(qǐng)?zhí)砑踊蜻x擇");</p><p><b> return;</b></p><p><b> }</b></p><p> list.GetText(index,filename);</p><p> SetDlgItemT
57、ext(IDC_FILENAME,filename);</p><p> player.Stop();</p><p> player.Open(m_hWnd,filename);</p><p> player.Play();</p><p> KillTimer(0);</p><p> SetTimer
58、(0,1000,NULL);</p><p> hour=minute=second=ch=cm=cs=0;</p><p> temp.Format(" %d:%d:%d / %d:%d:%d",ch,cm,cs,hour,minute,second);</p><p> SetDlgItemText(IDC_STATIC_TIME,te
59、mp);</p><p> process.SetPos(0);</p><p> // TODO: 在此添加控件通知處理程序代碼</p><p><b> }</b></p><p><b> 添加音樂</b></p><p> void CMPlayerDlg:
60、:OnBnClickedAdd()</p><p><b> {</b></p><p> char fliter[]="音樂文件(*.mp3;*.wma;*.wav)\0*.mp3;*.wma;*.wav\0"</p><p> "所有文件(*.*)\0*.*\0\0";</p>&
61、lt;p> CFileDialog fdlg(TRUE);</p><p> fdlg.m_ofn.lpstrFilter=fliter;</p><p> if(IDOK==fdlg.DoModal())</p><p><b> {</b></p><p> CString path=fdlg.Get
62、PathName();</p><p> CString file=fdlg.GetFileName();</p><p> list.InsertString(list.GetCount(),path);</p><p> list.SetCurSel(list.GetCount()-1);</p><p><b> }&
63、lt;/b></p><p> // TODO: 在此添加控件通知處理程序代碼</p><p><b> }</b></p><p><b> 暫停音樂</b></p><p> void CMPlayerDlg::OnBnClickedPause()</p><p
64、><b> {</b></p><p> CString temp;</p><p> GetDlgItemText(IDC_PAUSE,temp);</p><p> if(temp.Compare("暫停")==0)</p><p><b> {</b><
65、;/p><p> player.Pause();</p><p> SetDlgItemText(IDC_PAUSE,"繼續(xù)播放");</p><p> KillTimer(0);</p><p><b> }</b></p><p> else if(temp.Comp
66、are("繼續(xù)播放")==0)</p><p><b> {</b></p><p> player.resume();</p><p> SetDlgItemText(IDC_PAUSE,"暫停");</p><p> SetTimer(0,1000,NULL);<
67、/p><p><b> }</b></p><p> // TODO: 在此添加控件通知處理程序代碼</p><p><b> }</b></p><p><b> 停止</b></p><p> void CMPlayerDlg::OnBnCli
68、ckedStop()</p><p><b> {</b></p><p> KillTimer(0);</p><p> CString temp;</p><p> GetDlgItemText(IDC_PAUSE,temp);</p><p> if(temp.Compare(&q
69、uot;繼續(xù)播放")==0)</p><p><b> {</b></p><p> SetDlgItemText(IDC_PAUSE,"暫停");</p><p><b> }</b></p><p> player.Stop();</p>&l
70、t;p><b> hour=0;</b></p><p><b> minute=0;</b></p><p><b> second=0;</b></p><p><b> ch=0;</b></p><p><b> cm=0
71、;</b></p><p><b> cs=0;</b></p><p> temp.Format(" %d:%d:%d / %d:%d:%d",ch,cm,cs,hour,minute,second);</p><p> SetDlgItemText(IDC_STATIC_TIME,temp);</
72、p><p> process.SetPos(0);</p><p> // TODO: 在此添加控件通知處理程序代碼</p><p><b> }</b></p><p><b> 刪除</b></p><p> void CMPlayerDlg::OnBnClicke
73、dDelete()</p><p><b> {</b></p><p> list.DeleteString(list.GetCurSel());</p><p> // TODO: 在此添加控件通知處理程序代碼</p><p><b> }</b></p><p>
74、;<b> 滑動(dòng)音量控制</b></p><p> void CMPlayerDlg::OnCustomdrawSliderVol(NMHDR *pNMHDR, LRESULT *pResult)</p><p><b> {</b></p><p> LPNMCUSTOMDRAW pNMCD = reinterp
75、ret_cast<LPNMCUSTOMDRAW>(pNMHDR);</p><p> // TODO: 在此添加控件通知處理程序代碼</p><p> volume=vol.GetPos();</p><p> player.SetVolume(volume);</p><p> CString Vtemp;</p&
76、gt;<p> Vtemp.Format("音量 %d%%",volume/10);</p><p> SetDlgItemText(IDC_STATIC_VOL,Vtemp);</p><p> *pResult = 0;</p><p><b> }</b></p><p>
77、<b> 時(shí)間</b></p><p> void CMPlayerDlg::OnCustomdrawSliderTime(NMHDR *pNMHDR, LRESULT *pResult)</p><p><b> {</b></p><p> LPNMCUSTOMDRAW pNMCD = reinterpret_
78、cast<LPNMCUSTOMDRAW>(pNMHDR);</p><p> // TODO: 在此添加控件通知處理程序代碼</p><p> *pResult = 0;</p><p><b> }</b></p><p> void CMPlayerDlg::OnTimer(UINT_PTR nI
79、DEvent)</p><p><b> {</b></p><p> CString temp;</p><p> // TODO: 在此添加消息處理程序代碼和/或調(diào)用默認(rèn)值</p><p> if(nIDEvent==0)</p><p><b> {</b>&
80、lt;/p><p> int index;</p><p> totaltime=player.info(MCI_STATUS_LENGTH);</p><p> currenttime=player.info(MCI_STATUS_POSITION);</p><p> if(currenttime>=totaltime)<
81、/p><p><b> {</b></p><p> switch(mode)</p><p><b> {</b></p><p> case SINGLE:</p><p> player.SeekTo(0);</p><p> OnBnC
82、lickedStop();</p><p><b> break;</b></p><p> case R_SINGLE:</p><p> player.SeekTo(0);</p><p> OnBnClickedPlay();</p><p><b> break;<
83、;/b></p><p><b> case ALL:</b></p><p> index=list.GetCurSel();</p><p> if(index<list.GetCount()-1)</p><p><b> {</b></p><p>
84、; OnBnClickedBtnNext();</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> player.SeekTo(0);</p><p> O
85、nBnClickedStop();</p><p><b> }</b></p><p><b> break;</b></p><p> case R_ALL:</p><p> index=list.GetCurSel();</p><p> if(index&
86、lt;list.GetCount()-1)</p><p><b> {</b></p><p> OnBnClickedBtnNext();</p><p><b> }</b></p><p><b> else</b></p><p>&l
87、t;b> {</b></p><p> list.SetCurSel(0);</p><p> OnBnClickedPlay();</p><p><b> }</b></p><p><b> break;</b></p><p><b&
88、gt; }</b></p><p><b> return;</b></p><p><b> }</b></p><p> totaltime=totaltime/1000;</p><p> hour=totaltime/3600;</p><p>
89、 minute=(totaltime/60)%60;</p><p> second=totaltime%60;</p><p> currenttime=currenttime/1000;</p><p> process.SetPos((currenttime*100)/totaltime);</p><p> ch=curre
90、nttime/3600;</p><p> cm=(currenttime/60)%60;</p><p> cs=currenttime%60;</p><p> temp.Format("%d:%d:%d / %d:%d:%d",ch,cm,cs,hour,minute,second);</p><p> Se
91、tDlgItemText(IDC_STATIC_TIME,temp);</p><p><b> }</b></p><p> CDialogEx::OnTimer(nIDEvent);</p><p><b> }</b></p><p> void CMPlayerDlg::OnRele
92、asedcaptureSliderTime(NMHDR *pNMHDR, LRESULT *pResult)</p><p><b> {</b></p><p> // TODO: 在此添加控件通知處理程序代碼</p><p> SetTimer(0,1000,NULL);</p><p> CString t
93、emp;</p><p> GetDlgItemText(IDC_PAUSE,temp);</p><p> DWORD time=player.info(MCI_STATUS_LENGTH);</p><p> DWORD currenttime;</p><p> currenttime=time*(process.GetPos(
94、))/100;</p><p> player.SeekTo(currenttime);</p><p> player.Play();</p><p> if(temp.Compare("繼續(xù)播放")==0)</p><p><b> {</b></p><p>
95、SetDlgItemText(IDC_PAUSE,"暫停");</p><p><b> }</b></p><p> *pResult = 0;</p><p><b> }</b></p><p><b> 返回</b></p>&
96、lt;p> void CMPlayerDlg::OnBnClickedBtnBack()</p><p><b> {</b></p><p> int index;</p><p> index=list.GetCurSel();</p><p><b> index-=1;</b>
97、;</p><p> if(index<0)</p><p><b> {</b></p><p> MessageBox("沒有音樂|");</p><p><b> return;</b></p><p><b> }<
98、/b></p><p> list.SetCurSel(index);</p><p> OnBnClickedPlay();</p><p> // TODO: 在此添加控件通知處理程序代碼</p><p><b> }</b></p><p><b> 列表</
99、b></p><p> void CMPlayerDlg::OnDblclkList()</p><p><b> {</b></p><p> OnBnClickedPlay();</p><p> // TODO: 在此添加控件通知處理程序代碼</p><p><b>
100、 }</b></p><p><b> 模式</b></p><p> void CMPlayerDlg::OnBnClickedBtnMode()</p><p><b> {</b></p><p> switch(mode)</p><p><
101、;b> {</b></p><p> case SINGLE:</p><p> mode=R_SINGLE;</p><p> SetDlgItemText(IDC_BTN_MODE,"播放模式:單曲循環(huán)");</p><p><b> break;</b></p&
102、gt;<p> case R_SINGLE:</p><p><b> mode=ALL;</b></p><p> SetDlgItemText(IDC_BTN_MODE,"播放模式:全部播放");</p><p><b> break;</b></p><p
103、><b> case ALL:</b></p><p> mode=R_ALL;</p><p> SetDlgItemText(IDC_BTN_MODE,"播放模式:全部循環(huán)");</p><p><b> break;</b></p><p> case R_
104、ALL:</p><p> mode=SINGLE;</p><p> SetDlgItemText(IDC_BTN_MODE,"播放模式:單曲播放");</p><p><b> break;</b></p><p><b> }</b></p><
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 眾賞文庫僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 樂曲程序的設(shè)計(jì)與實(shí)現(xiàn)---課程設(shè)計(jì)
- 網(wǎng)絡(luò)程序課程設(shè)計(jì)---實(shí)現(xiàn)網(wǎng)絡(luò)對(duì)時(shí)程序
- 課程設(shè)計(jì)---ping程序設(shè)計(jì)與實(shí)現(xiàn)
- c_程序設(shè)計(jì)課程程序設(shè)計(jì)報(bào)告---媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 課程設(shè)計(jì)--基于觸摸的音頻播放系統(tǒng)
- 算法課程設(shè)計(jì)---中文分詞程序設(shè)計(jì)與實(shí)現(xiàn)
- 數(shù)據(jù)結(jié)構(gòu)課程設(shè)計(jì)報(bào)告--程序的設(shè)計(jì)與實(shí)現(xiàn)
- 課程設(shè)計(jì)--unix程序設(shè)計(jì)課程設(shè)計(jì)
- tracer程序課程設(shè)計(jì)
- java課程設(shè)計(jì)--局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- java課程設(shè)計(jì)---局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- 課程設(shè)計(jì)---賓館客房管理程序的設(shè)計(jì)與實(shí)現(xiàn)
- java課程設(shè)計(jì)---局域網(wǎng)聊天程序的設(shè)計(jì)與實(shí)現(xiàn)
- web程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告-選課系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- 程序設(shè)計(jì)課程設(shè)計(jì)報(bào)告
- web程序設(shè)計(jì)課程設(shè)計(jì)--簡易論壇程序開發(fā)
- 停車場(chǎng)模擬管理程序的設(shè)計(jì)與實(shí)現(xiàn) 課程設(shè)計(jì)
- 課程設(shè)計(jì)----年歷處理程序的設(shè)計(jì)
- matlab程序設(shè)計(jì) 課程設(shè)計(jì)
評(píng)論
0/150
提交評(píng)論