版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(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文件的打開(kāi)模塊……………………………………….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ì)過(guò)程中遇到的問(wèn)題和感想…………………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控件,可以分別通過(guò)按鈕和菜單實(shí)現(xiàn)*.mp3、*.mid、*.avi、*wav等媒體文件的打開(kāi)、播放、暫停、全屏、音量調(diào)節(jié)、快進(jìn)、快退、關(guān)閉、循環(huán)播放等功能。還通過(guò)更換位圖的方式,實(shí)現(xiàn)了換皮膚功能。</p><p> 打開(kāi)文件:通過(guò)選擇文件類型
8、打開(kāi)不同類型的文件,如果打開(kāi)的格式不對(duì),消息框會(huì)提醒打開(kāi)正確的格式的文件。再打開(kāi)文件前,其他按鍵不能進(jìn)行操作。</p><p> 播放文件:開(kāi)始播放文件。</p><p> 停止播放:停止播放文件。</p><p> 全屏:將播放器變?yōu)槿痢?lt;/p><p> 快退、快進(jìn):實(shí)現(xiàn)快退、快進(jìn)功能。</p><p>
9、 換皮膚:選擇沙漠、可愛(ài)棒冰、燈塔、郁金香可以為播放器換不同的背景。</p><p> 音量調(diào)節(jié):可以實(shí)現(xiàn)調(diào)大,調(diào)小音量的功能。</p><p><b> 三、軟件設(shè)計(jì)模塊</b></p><p> 3.1文件的打開(kāi)模式</p><p> 在WavePlayDlg.h中設(shè)定一個(gè)int型的全局m_MediaTyp
10、e,通過(guò)選擇不同的按鈕來(lái)給m_MediaType賦不同的值,不同的值代表不同的文件格式。</p><p><b> 打開(kāi)文件代碼:</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不同的值來(lái)設(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ì)過(guò)程中遇到的問(wèn)題</p><p> 最先想基于MMcontrol插件來(lái)寫(xiě)這個(gè)程序,發(fā)現(xiàn)這個(gè)插件很難實(shí)現(xiàn)播放視頻,調(diào)節(jié)音量等功能,便改用了windows media player插件來(lái)完成。在編寫(xiě)程序過(guò)程中遇到了
77、不少問(wèn)題,在實(shí)現(xiàn)暫停功能時(shí)報(bào)錯(cuò),后來(lái)查看相關(guān)資料才發(fā)現(xiàn)沒(méi)有加上#include"wmpcontrols.h"、#include"wmpsettings.h"頭文件。在給對(duì)話框添加背景后發(fā)現(xiàn)文本框沒(méi)有透明化,通過(guò)百度查找相關(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)的不是所需畫(huà)筆,則返回另一個(gè)畫(huà)筆</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ò)誤,后來(lái)請(qǐng)教同學(xué)才知道了圖片應(yīng)為.bmp類型并且256位以下。</p&g
82、t;<p> 在實(shí)現(xiàn)換皮膚的功能時(shí)也遇到了問(wèn)題,不知道要通過(guò)什么方式來(lái)改變使用的位圖,后來(lái)想到可以采取和打開(kāi)不同類型的文件相同的方式來(lái)改變選擇使用的位圖,可是又不知道該使用哪種刷新窗口方式來(lái)實(shí)現(xiàn)這個(gè)功能,最后還是通過(guò)百度窗口刷新方法確定使用Invalidate()。</p><p> 在完成這個(gè)作業(yè)的過(guò)程中,讓我對(duì)MFC有了更加深刻的了解,通過(guò)去圖書(shū)館借閱資料及網(wǎng)上查閱資料學(xué)到了很多書(shū)本以外的東
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ù)庫(kù)開(kāi)發(fā)實(shí)例》 人民郵電出版社</p><p> 《vc++面向?qū)ο笈c可視化程序設(shè)計(jì)》 黃維通</p>&l
溫馨提示
- 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ù)僅提供信息存儲(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ì)與開(kāi)發(fā).pdf
- 利用vb實(shí)現(xiàn)多媒體播放器
- 颶風(fēng)影音多媒體播放器(代碼部分)
- 多媒體播放器系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)
- 便攜式多媒體播放器硬件設(shè)計(jì).pdf
- 基于vc平臺(tái)的mci媒體播放器開(kāi)題報(bào)告
- 基于多媒體播放器的音樂(lè)播放模塊的設(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)論