版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、<p><b> 課 程 設(shè) 計(jì)</b></p><p> 2013——2014學(xué)年 第2學(xué)期</p><p><b> 目錄</b></p><p> 設(shè)計(jì)題目及要求……………………………………3</p><p> 基本功能描述………………………………………4</p&g
2、t;<p> 軟件設(shè)計(jì)模塊………………………………………6</p><p> 3.1文件的打開模塊……………………………………….6</p><p> 3.2文件的播放模塊……………………………………… 9</p><p> 3.3文件的停止模塊……………………………………….9</p><p> 3.4全屏模塊………
3、……………………………………….9</p><p> 3.5快進(jìn)、快退模塊……………………………………….9</p><p> 3.6換皮膚模塊……………………………………………10</p><p> 3.7音量調(diào)節(jié)模塊…………………………………………12</p><p> 3.8窗口隱藏模塊…………………………………………12<
4、;/p><p> 3.9文件暫停模塊…………………………………………12</p><p> 4.運(yùn)行結(jié)果……………………………………………….13</p><p> 5.設(shè)計(jì)過程中遇到的問題和感想…………………15</p><p> 6.參考文獻(xiàn)…………………………………………16</p><p><b>
5、; 一、設(shè)計(jì)題目及要求</b></p><p><b> 1.1設(shè)計(jì)題目</b></p><p> 基于MFC的多媒體播放器系統(tǒng)</p><p><b> 1.2題目要求</b></p><p> 1.制作一個(gè)具有自己設(shè)計(jì)風(fēng)格的媒體播放器。</p><p&g
6、t; 2.要求能隨機(jī)選取要播放的文件,實(shí)現(xiàn)前進(jìn),回退,暫停,循環(huán)播放,音量大小調(diào)節(jié)等基本功能。</p><p> 3.要求能播放多種格式(至少四種或四種以上)的音頻視頻格式文件。 </p><p> 4.可以實(shí)現(xiàn)其它附加功能(不在要求范圍之內(nèi))</p><p> 5.界面良好,功能完善</p><p><b> 二、基本功
7、能描述</b></p><p> 本次課程設(shè)計(jì)制作的多媒體播放器是利用Windows系統(tǒng)自帶的Windows Media Player控件,可以分別通過按鈕和菜單實(shí)現(xiàn)*.mp3、*.mid、*.avi、*wav等媒體文件的打開、播放、暫停、全屏、音量調(diào)節(jié)、快進(jìn)、快退、關(guān)閉、循環(huán)播放等功能。還通過更換位圖的方式,實(shí)現(xiàn)了換皮膚功能。</p><p> 打開文件:通過選擇文件類型
8、打開不同類型的文件,如果打開的格式不對(duì),消息框會(huì)提醒打開正確的格式的文件。再打開文件前,其他按鍵不能進(jìn)行操作。</p><p> 播放文件:開始播放文件。</p><p> 停止播放:停止播放文件。</p><p> 全屏:將播放器變?yōu)槿痢?lt;/p><p> 快退、快進(jìn):實(shí)現(xiàn)快退、快進(jìn)功能。</p><p>
9、 換皮膚:選擇沙漠、可愛棒冰、燈塔、郁金香可以為播放器換不同的背景。</p><p> 音量調(diào)節(jié):可以實(shí)現(xiàn)調(diào)大,調(diào)小音量的功能。</p><p><b> 三、軟件設(shè)計(jì)模塊</b></p><p> 3.1文件的打開模式</p><p> 在WavePlayDlg.h中設(shè)定一個(gè)int型的全局m_MediaTyp
10、e,通過選擇不同的按鈕來給m_MediaType賦不同的值,不同的值代表不同的文件格式。</p><p><b> 打開文件代碼:</b></p><p> void CWavePlayDlg::OnOpen() </p><p><b> {</b></p><p> // TODO: A
11、dd your control notification handler code here</p><p> CFileDialog OpenDlg(TRUE);</p><p> switch(this->m_MediaType)</p><p><b> {</b></p><p><b>
12、 case 1:</b></p><p><b> {</b></p><p> char szFileFilter[]= </p><p> { "Mp3 File(*.mp3)|*.mp3|"</p><p> "MPEG File(*.mpeg)|*.mpeg|&q
13、uot;</p><p> "Media File(*.asf)|*.asf|"</p><p> "Video File(*.dat)|*.dat|"</p><p> "MPGA File(*.mpga)|*.mpga|"</p><p> "Wave File
14、(*.wav)|*.wav|"</p><p> "AVI File(*.avi)|*.avi|"</p><p> "Movie File(*.mov)|*.mov|"</p><p> "Mid File(*.mid;*,rmi)|*.mid;*.rmi|"</p><
15、;p> "Wma File(*.wma)|*.wma|"</p><p> "All File(*.*)|*.*||"</p><p><b> };</b></p><p> CFileDialog fileDialog ( TRUE,_T("wav"),NULL,NU
16、LL,_T("wav音頻文件(*.wav)|*.wav||")); //選擇wav模式</p><p> if (fileDialog.DoModal() == IDOK)</p><p><b> {</b></p><p> m_filename=fileDialog.GetPathName();</p>
17、;<p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> case 2:</b></p><p><b> {</b><
18、;/p><p> char szFileFilter[]= </p><p> { "Mp3 File(*.mp3)|*.mp3|"</p><p> "MPEG File(*.mpeg)|*.mpeg|"</p><p> "Media File(*.asf)|*.asf|"&
19、lt;/p><p> "Video File(*.dat)|*.dat|"</p><p> "MPGA File(*.mpga)|*.mpga|"</p><p> "Wave File(*.wav)|*.wav|"</p><p> "AVI File(*.avi)
20、|*.avi|"</p><p> "Movie File(*.mov)|*.mov|"</p><p> "Mid File(*.mid;*,rmi)|*.mid;*.rmi|"</p><p> "Wma File(*.wma)|*.wma|"</p><p>
21、 "All File(*.*)|*.*||"</p><p><b> };</b></p><p> CFileDialog fileDialog ( TRUE,_T("avi"),NULL,NULL,_T("avi音頻文件(*.avi)|*.avi||")); //選擇avi模式</p>
22、<p> if (fileDialog.DoModal() == IDOK)</p><p><b> {</b></p><p> m_filename=fileDialog.GetPathName();</p><p><b> }</b></p><p><b>
23、; break;</b></p><p><b> }</b></p><p><b> case 3:</b></p><p><b> {</b></p><p> char szFileFilter[]= </p><p>
24、 { "Mp3 File(*.mp3)|*.mp3|"</p><p> "MPEG File(*.mpeg)|*.mpeg|"</p><p> "Media File(*.asf)|*.asf|"</p><p> "Video File(*.dat)|*.dat|"</
25、p><p> "MPGA File(*.mpga)|*.mpga|"</p><p> "Wave File(*.wav)|*.wav|"</p><p> "AVI File(*.avi)|*.avi|"</p><p> "Movie File(*.mov)|*.m
26、ov|"</p><p> "Mid File(*.mid;*,rmi)|*.mid;*.rmi|"</p><p> "Wma File(*.wma)|*.wma|"</p><p> "All File(*.*)|*.*||"</p><p><b>
27、 };</b></p><p> CFileDialog fileDialog ( TRUE,_T("mid"),NULL,NULL,_T("avi音頻文件(*.mid)|*.mid||")); //選擇mid模式</p><p> if (fileDialog.DoModal() == IDOK)</p><p&
28、gt;<b> {</b></p><p> m_filename=fileDialog.GetPathName();</p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b>&l
29、t;/p><p><b> case 4:</b></p><p><b> {</b></p><p> char szFileFilter[]= </p><p> { "Mp3 File(*.mp3)|*.mp3|"</p><p> &quo
30、t;MPEG File(*.mpeg)|*.mpeg|"</p><p> "Media File(*.asf)|*.asf|"</p><p> "Video File(*.dat)|*.dat|"</p><p> "MPGA File(*.mpga)|*.mpga|"</p>
31、;<p> "Wave File(*.wav)|*.wav|"</p><p> "AVI File(*.avi)|*.avi|"</p><p> "Movie File(*.mov)|*.mov|"</p><p> "Mid File(*.mid;*,rmi)|*.mi
32、d;*.rmi|"</p><p> "Wma File(*.wma)|*.wma|"</p><p> "All File(*.*)|*.*||"</p><p><b> };</b></p><p> CFileDialog fileDialog ( TRU
33、E,_T("mp3"),NULL,NULL,_T("mp3音頻文件(*.mp3)|*.mp3||")); //選擇MP3模式</p><p> if (fileDialog.DoModal() == IDOK)</p><p><b> {</b></p><p> m_filename=fileD
34、ialog.GetPathName();</p><p><b> }</b></p><p><b> break;</b></p><p><b> }</b></p><p><b> }</b></p><p>
35、 this->m_FileName.SetWindowText(m_filename);</p><p> this->m_CloseButton.EnableWindow(true);</p><p> this->m_playbotton.EnableWindow(true);</p><p><b> }</b>
36、;</p><p> void CWavePlayDlg::OnRadio1() //選擇不同類型的文件</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p>
37、<p> m_MediaType=1;</p><p><b> }</b></p><p> void CWavePlayDlg::OnRadio2() </p><p><b> {</b></p><p> // TODO: Add your control noti
38、fication handler code here</p><p> m_MediaType=2;</p><p><b> }</b></p><p> void CWavePlayDlg::OnRadio3() </p><p><b> {</b></p><p&
39、gt; // TODO: Add your control notification handler code here</p><p> m_MediaType=3;</p><p><b> }</b></p><p> void CWavePlayDlg::OnRadio4() </p><p><b
40、> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_MediaType=4;</p><p><b> }</b></p><p> 3.2文件的播放模塊</p>
41、<p> 在.WavePlayDlg.h中添加#include"wmpcontrols.h"、#include"wmpsettings.h"</p><p><b> 文件播放代碼:</b></p><p> void CWavePlayDlg::OnPlay() </p><p>&l
42、t;b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_play.SetUrl(m_filename);</p><p> this->m_full.EnableWindow(true);</p>&l
43、t;p> this->m_decvolum.EnableWindow(true);</p><p> this->m_addvolum.EnableWindow(true);</p><p> this->m_fast.EnableWindow(true);</p><p> this->m_slow.EnableWindow
44、(true);</p><p><b> }</b></p><p> 3.3文件的停止模塊</p><p> void CWavePlayDlg::OnClose() </p><p><b> {</b></p><p> // TODO: Add your c
45、ontrol notification handler code here</p><p> m_play.close();</p><p><b> }</b></p><p><b> 3.4全屏模塊</b></p><p> void CWavePlayDlg::Onfullscree
46、n() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_play.SetFullScreen(1);</p><p><b> }</b><
47、/p><p> 3.5快進(jìn)、快退模塊</p><p> void CWavePlayDlg::Onfast() 快進(jìn)</p><p><b> {</b></p><p> // TODO: Add your control notification handler code
48、here</p><p> m_play.GetControls().fastForward();</p><p><b> }</b></p><p> void CWavePlayDlg::Onslow() 快退</p><p><b> {&l
49、t;/b></p><p> // TODO: Add your control notification handler code here</p><p> m_play.GetControls().fastReverse();</p><p><b> }</b></p><p><b>
50、3.6換皮膚模塊</b></p><p> 定義一個(gè)int型的全局變量m_change,選擇不同的按鈕會(huì)給m_change賦不同的值,在onpaint函數(shù)中根據(jù)m_change不同的值來設(shè)置不同的背景。</p><p><b> 換皮膚代碼:</b></p><p> void CWavePlayDlg::Onshamo()
51、</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_change=1;</p><p> Invalidate();</p><p><b&
52、gt; }</b></p><p> void CWavePlayDlg::Oncaodi() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_chang
53、e=2;</p><p> Invalidate();</p><p><b> }</b></p><p> void CWavePlayDlg::Ondengta() </p><p><b> {</b></p><p> // TODO: Add your
54、 control notification handler code here</p><p> m_change=3;</p><p> Invalidate();</p><p><b> }</b></p><p> void CWavePlayDlg::Onyujinx() </p>&l
55、t;p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_change=4;</p><p> Invalidate();</p><p><b> }</b>
56、;</p><p> void CWavePlayDlg::OnPaint() </p><p><b> {</b></p><p> if(this->m_change==1)//實(shí)現(xiàn)換皮膚功能</p><p><b> {</b></p><p> CP
57、aintDC dc(this);</p><p> CBitmap bitmap;</p><p> bitmap.LoadBitmap(IDB_BITMAP2);</p><p> CBrush brush;</p><p> brush.CreatePatternBrush(&bitmap);</p>&l
58、t;p> CBrush* pOldBrush=dc.SelectObject(&brush);</p><p> dc.Rectangle(0,0,800,800);</p><p> dc.SelectObject(pOldBrush);</p><p><b> }</b></p><p>
59、else if(this->m_change==2)</p><p><b> {</b></p><p> CPaintDC dc(this);</p><p> CBitmap bitmap;</p><p> bitmap.LoadBitmap(IDB_BITMAP5);</p><
60、;p> CBrush brush;</p><p> brush.CreatePatternBrush(&bitmap);</p><p> CBrush* pOldBrush=dc.SelectObject(&brush);</p><p> dc.Rectangle(0,0,800,800);</p><p>
61、; dc.SelectObject(pOldBrush);</p><p><b> }</b></p><p> else if(this->m_change==3)</p><p><b> {</b></p><p> CPaintDC dc(this);</p>
62、<p> CBitmap bitmap;</p><p> bitmap.LoadBitmap(IDB_BITMAP4);</p><p> CBrush brush;</p><p> brush.CreatePatternBrush(&bitmap);</p><p> CBrush* pOldBrush=d
63、c.SelectObject(&brush);</p><p> dc.Rectangle(0,0,800,800);</p><p> dc.SelectObject(pOldBrush);</p><p><b> }</b></p><p> else if(this->m_change==4
64、)</p><p><b> {</b></p><p> CPaintDC dc(this);</p><p> CBitmap bitmap;</p><p> bitmap.LoadBitmap(IDB_BITMAP6);</p><p> CBrush brush;</p&
65、gt;<p> brush.CreatePatternBrush(&bitmap);</p><p> CBrush* pOldBrush=dc.SelectObject(&brush);</p><p> dc.Rectangle(0,0,800,800);</p><p> dc.SelectObject(pOldBrush
66、);</p><p><b> }</b></p><p><b> else</b></p><p><b> {</b></p><p> CPaintDC dc(this);</p><p> CBitmap bitmap;</p&
67、gt;<p> bitmap.LoadBitmap(IDB_BITMAP9);</p><p> CBrush brush;</p><p> brush.CreatePatternBrush(&bitmap);</p><p> CBrush* pOldBrush=dc.SelectObject(&brush);</p&
68、gt;<p> dc.Rectangle(0,0,800,800);</p><p> dc.SelectObject(pOldBrush);</p><p><b> }</b></p><p><b> ……</b></p><p><b> }</b&g
69、t;</p><p><b> 3.7音量調(diào)節(jié)模塊</b></p><p> void CWavePlayDlg::Ondecvolum() //減小音量</p><p><b> {</b></p><p> // TODO: Add
70、your control notification handler code here</p><p> m_play.GetSettings().SetVolume(m_play.GetSettings().GetVolume()-10); </p><p><b> }</b></p><p> void CWavePlayDlg::
71、OnAddvolum() //增大音量</p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_play.GetSettings().SetVolume
72、(m_play.GetSettings().GetVolume()+10); </p><p><b> }</b></p><p><b> 3.8窗口隱藏模塊</b></p><p> void CWavePlayDlg::OnClose2() </p><p><b> {&
73、lt;/b></p><p> // TODO: Add your control notification handler code here</p><p> m_play.CloseWindow();</p><p><b> }</b></p><p><b> 3.9文件暫停模塊<
74、/b></p><p> void CWavePlayDlg::OnPause() </p><p><b> {</b></p><p> // TODO: Add your control notification handler code here</p><p> m_play.GetControl
75、s().pause();</p><p><b> }</b></p><p><b> 四、運(yùn)行結(jié)果</b></p><p><b> 播放.MP3文件</b></p><p><b> 播放.avi文件</b></p><
76、p><b> 換皮膚</b></p><p><b> 窗口隱藏</b></p><p> 五、設(shè)計(jì)過程中遇到的問題</p><p> 最先想基于MMcontrol插件來寫這個(gè)程序,發(fā)現(xiàn)這個(gè)插件很難實(shí)現(xiàn)播放視頻,調(diào)節(jié)音量等功能,便改用了windows media player插件來完成。在編寫程序過程中遇到了
77、不少問題,在實(shí)現(xiàn)暫停功能時(shí)報(bào)錯(cuò),后來查看相關(guān)資料才發(fā)現(xiàn)沒有加上#include"wmpcontrols.h"、#include"wmpsettings.h"頭文件。在給對(duì)話框添加背景后發(fā)現(xiàn)文本框沒有透明化,通過百度查找相關(guān)資料才知道要加上一段代碼,同時(shí)還可以給文本框里的文字改變顏色。</p><p><b> 代碼如下:</b></p>
78、<p> HBRUSH CWavePlayDlg::OnCtlColor(CDC* pDC, CWnd* pWnd, UINT nCtlColor) </p><p><b> {</b></p><p> HBRUSH hbr = CDialog::OnCtlColor(pDC, pWnd, nCtlColor);</p><p
79、> if(nCtlColor == CTLCOLOR_STATIC )</p><p><b> {</b></p><p> pDC->SetBkMode(TRANSPARENT);//設(shè)置背景透明</p><p> pDC->SetTextColor(RGB(0,0,0));//設(shè)置字體顏色</p>
80、<p> return (HBRUSH)::GetStockObject(NULL_BRUSH);</p><p><b> }</b></p><p> // TODO: 如果默認(rèn)的不是所需畫筆,則返回另一個(gè)畫筆</p><p> return hbr;</p><p> // TODO: Ret
81、urn a different brush if the default is not desired</p><p> return hbr;</p><p><b> }</b></p><p> 在引入位圖時(shí),因?yàn)椴恢乐荒芤?bmp類型的圖片一直出現(xiàn)錯(cuò)誤,后來請(qǐng)教同學(xué)才知道了圖片應(yīng)為.bmp類型并且256位以下。</p&g
82、t;<p> 在實(shí)現(xiàn)換皮膚的功能時(shí)也遇到了問題,不知道要通過什么方式來改變使用的位圖,后來想到可以采取和打開不同類型的文件相同的方式來改變選擇使用的位圖,可是又不知道該使用哪種刷新窗口方式來實(shí)現(xiàn)這個(gè)功能,最后還是通過百度窗口刷新方法確定使用Invalidate()。</p><p> 在完成這個(gè)作業(yè)的過程中,讓我對(duì)MFC有了更加深刻的了解,通過去圖書館借閱資料及網(wǎng)上查閱資料學(xué)到了很多書本以外的東
83、西,也知道了我們學(xué)習(xí)知識(shí)不應(yīng)該僅僅局限于課本,應(yīng)該查閱多方面的資料。任何學(xué)習(xí)都是應(yīng)該多實(shí)踐,只有自己多做才能真的掌握這些知識(shí)。</p><p><b> 六、參考文獻(xiàn)</b></p><p> 《Vc++6.0數(shù)據(jù)庫開發(fā)實(shí)例》 人民郵電出版社</p><p> 《vc++面向?qū)ο笈c可視化程序設(shè)計(jì)》 黃維通</p>&l
溫馨提示
- 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ì)
- 多媒體播放器論文
- 基于vc++的多媒體播放器設(shè)計(jì)與實(shí)現(xiàn)
- 可視化課程設(shè)計(jì)---多媒體播放器系統(tǒng)實(shí)現(xiàn)
- 軟件工程課程設(shè)計(jì)---媒體播放器
- 多媒體播放器(PMP)實(shí)現(xiàn).pdf
- 多媒體播放器的設(shè)計(jì)與開發(fā).pdf
- 利用vb實(shí)現(xiàn)多媒體播放器
- 颶風(fēng)影音多媒體播放器(代碼部分)
- 多媒體播放器系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 便攜式多媒體播放器硬件設(shè)計(jì).pdf
- 基于vc平臺(tái)的mci媒體播放器開題報(bào)告
- 基于多媒體播放器的音樂播放模塊的設(shè)計(jì)與實(shí)現(xiàn)
- 基于多媒體播放器的視頻播放模塊的設(shè)計(jì)與實(shí)現(xiàn)
- 多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)畢業(yè)論文
- 基于vc平臺(tái)的mci媒體播放器畢業(yè)論文
- 畢業(yè)設(shè)計(jì)(論文)多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn)
- 基于嵌入式Linux的多媒體播放器設(shè)計(jì).pdf
- 基于USB主機(jī)的多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn).pdf
- 一種網(wǎng)絡(luò)多媒體播放器的設(shè)計(jì)與實(shí)現(xiàn).pdf
評(píng)論
0/150
提交評(píng)論