




版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
1、一.課題名稱:視屏播放器軟件設(shè)計(jì)及開發(fā)文檔PLAYER1:(基于ActiveMovie控件)1-三、需求分析與問題陳述:。設(shè)計(jì)動畫播放器,可以通過動畫控件播放動畫,用文件公用對話框打開AVI文件并播放,也可以通過鼠標(biāo)左右鍵控制;播放時(shí)若用鼠標(biāo)左鍵單擊畫面,可以暫停播放,若用右鍵單擊畫面,可以直接對畫面進(jìn)行播放,暫停,停止等控制,可以設(shè)置全屏效果。1-四、設(shè)計(jì)目標(biāo)與設(shè)計(jì)任務(wù):。一開始準(zhǔn)備設(shè)計(jì)一個(gè)基于對話框的工程,并為這個(gè)對話框定義以下八個(gè)按鈕:OPEN 打開AVI文件PLAY 開始播放文件PAUSE 暫停播放STOP 停止播放FULLSCREEM 設(shè)置全屏EXIT 退出ADD 增加音量REDUC
2、E 減少音量(模型一效果圖)后來為與播放器2區(qū)別,使用菜單方式,將按鈕功能用菜單中的按鍵實(shí)現(xiàn)。(菜單)整體效果如下:其次,添加鼠標(biāo)消息響應(yīng),實(shí)現(xiàn)單擊屏幕暫停(或繼續(xù))播放的功能。實(shí)現(xiàn)雙擊屏幕全屏(或恢復(fù)原始大小)的功能1-五、解題算法思想:。向?qū)υ捒蛱砑覣ctiveMovie控件,并為其添加相應(yīng)的變量,利用其成員函數(shù)實(shí)現(xiàn)目標(biāo)功能。主要代碼如下。1.實(shí)現(xiàn)播放文件的代碼:void CPlayerDlg:OnPlaystart() m_AMovie.Run(); SetTimer(0,20,NULL); /設(shè)置定時(shí)器2.實(shí)現(xiàn)播放暫停的代碼:void CPlayerDlg:OnPlaypause()
3、m_AMovie.stop(); 3.實(shí)現(xiàn)停止播放的代碼:void CPlayerDlg:OnPlaystop() m_AMovie.Stop(); KillTimer(0); /關(guān)掉定時(shí)器4.實(shí)現(xiàn)退出播放的代碼:void CPlayerDlg:OnFileexit() OnCancel();5.實(shí)現(xiàn)全屏的代碼:void CPlayerDlg:OnBtnAllShow() / TODO: Add your command handler code herem_AMovie.Pause();m_AMovie.SetFullScreenMode(true);m_AMovie.SetMovieWin
4、dowSize(SW_SHOWMAXIMIZED);m_AMovie.Run();6.實(shí)現(xiàn)文件打開的代碼:void CPlayerDlg:OnFileopen() char szFileFilter="Mp3 File(*.mp3)|*.mp3|""Wma File(*.wma)|*.wma|""Video File(*.dat)|*.dat|""Wave File(*.wav)|*.wav|""AVI File(*.avi)|*.avi|""Movie File(*.mov)|*.m
5、ov|" "Media File(*.mmm)|*.mmm|""Mid File(*.mid;*,rmi)|*.mid;*.rmi|""MPEG File(*.mpeg)|*.mpeg|""All File(*.*)|*.*|" CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal()=IDOK) CString PathName=dlg.GetPathName(); PathName.MakeUpper
6、(); m_AMovie.SetFileName(PathName); SetWindowText(m_AMovie.GetFileName(); 7實(shí)現(xiàn)鼠標(biāo)單擊屏幕暫停(或繼續(xù))播放的功能的代碼:void CPlayerDlg:OnClickAmovie() if(ispause=true)m_AMovie.Run(); ispause=false;else m_AMovie.Pause();ispause=true;8.實(shí)現(xiàn)鼠標(biāo)雙擊屏幕全屏(或恢復(fù)原始大小)的功能的代碼:void CPlayerDlg:OnDblClickAmovie() / TODO: Add your control
7、notification handler code herem_AMovie.Pause();if(m_AMovie.GetFullScreenMode()=1)m_AMovie.SetFullScreenMode(false);m_AMovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);elsem_AMovie.SetFullScreenMode(true);m_AMovie.SetMovieWindowSize(SW_SHOWNORMAL);m_AMovie.Run();9.對于音量的調(diào)節(jié),我們并沒有采用按鈕或者按鍵的方式實(shí)現(xiàn)。我們使用了進(jìn)度條控件。首先,我
8、們新增了一個(gè)對話框,在新對話框上插入一個(gè)進(jìn)度條,并新增相應(yīng)的控件變量。通過移動進(jìn)度條來改變動畫的聲音。主要代碼代碼如下:void CVolumeDlg:SetVolume(CActiveMovie3 *pAmovie) m_pAMovie=pAmovie;/ 如果未打開任何媒體文件,則音量調(diào)節(jié)不可用。ActiveMovie 控件的 / CurrentState 屬性返回控件的當(dāng)前狀態(tài),-1 表示未打開任何文件,此時(shí)彈出/ 出錯(cuò)提示信息。 if (m_pAMovie->GetCurrentState()!=-1)DoModal(); else MessageBox("音頻設(shè)備尚未
9、加載,請先打開一個(gè)媒體文件。"); void CVolumeDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)/ TODO: Add your message handler code here and/or call default CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;int nVolume=pSlider->GetPos();m_pAMovie->SetVolume(nVolume);CDialog:OnHScroll(nSBCode,
10、nPos, pScrollBar);BOOL CVolumeDlg:OnInitDialog()CDialog:OnInitDialog(); m_sld.SetRange(-10000, 0); m_sld.SetTicFreq(1000); m_sld.SetLineSize(200); m_sld.SetPageSize(1000); m_sld.SetPos(m_pAMovie->GetVolume(); return TRUE;1-六、數(shù)據(jù)結(jié)構(gòu)描述:。類中新增變量及其作用:1. m_AMovie,是與控件ActiveMovie相關(guān)的變量,通過處理該變量對播放器進(jìn)行功能實(shí)現(xiàn)。2.
11、 m_pAMovie,是指向ActiveMovie類的指針變量,存在于音量控制對話框類里,用于兩個(gè)對話框之間消息的傳遞傳遞。3. m_sld,是與滑動條控件相關(guān)的變量。通過處理該變量實(shí)現(xiàn)音量的改變。PLAYER2:(基于windows media player控件)2-三、需求分析與問題陳述:。 設(shè)計(jì)多媒體播放器,主要通過windows media player控件實(shí)現(xiàn)該播放器的主要功能。界面以按鈕為主,并通過按鈕實(shí)現(xiàn)對播放文件的各項(xiàng)控制。主要有文件打開、播放、暫停、停止、全屏以及音量、播放模式和播放列表的操作。由于該軟件為多媒體播放器,所以程序需要要支持多種格式的文件。除此之外,還設(shè)置了Es
12、c熱鍵以實(shí)現(xiàn)退出全屏的快捷操作。2-四、設(shè)計(jì)目標(biāo)與設(shè)計(jì)任務(wù):。一開始按照書上案例要求設(shè)計(jì)一個(gè)基于對話框的工程,并為這個(gè)對話框定義以下八個(gè)按鈕:OPEN 打開AVI文件PLAY 開始播放文件PAUSE 暫停播放STOP 停止播放FULLSCREEM 設(shè)置全屏EXIT 退出ADD 增加音量REDUCE 減少音量(圖1.模型1效果圖如下)在繼續(xù)設(shè)計(jì)的過程中,我們?yōu)閷?shí)現(xiàn)播放器功能的多樣化、人性化,又相繼增加了播放列表控件、播放列表操作組合空件和播放模式組合控件。而且將音量控制進(jìn)行改善,不僅增加了靜音控制,還將音量控制改變?yōu)榭刂茥l形式,使得更為直觀。(圖2.模型二效果圖如下) 而后期在對播放器界面美化過
13、程中,相繼為播放器添加了背景圖片以及改變了對話框的圖標(biāo),還有稍微調(diào)整了按鈕的排布。最終播放器界面效果如下圖:其次,添加按鈕、鼠標(biāo)、鍵盤消息響應(yīng),實(shí)現(xiàn)整體播放的功能。如:實(shí)現(xiàn)雙擊屏幕全屏(或恢復(fù)原始大小)的功能;Esc鍵實(shí)現(xiàn)退出全屏功能等等。2-五.解題算法思想:。向?qū)υ捒蛱砑觲indows media player控件(如下圖),并為其添加相應(yīng)的變量 CWMPPlayer m_player,利用其成員函數(shù)實(shí)現(xiàn)目標(biāo)功能。主要代碼如下:由于要對wmp播放器實(shí)現(xiàn)控制,還要添加其他三個(gè)成員變量: CWMPMedia m_media;CWMPSettings m_setting;CWMPControls
14、 m_control;所以還需要添加上述三個(gè)類的頭文件: / wmplayerDlg.h : header file / #include "wmpcontrols.h" #include "wmpsettings.h" #include "wmpplaylist.h"1.實(shí)現(xiàn)播放文件的代碼:void CWmplayerDlg:OnPlayer() / TODO: Add your control notification handler code hereCFileFind finder;if(m_list.GetCount()&l
15、t;=0) MessageBox("列表無文件!","Warning",MB_OK); spaceflag=1; else if(!finder.FindFile(m_player.GetUrl() MessageBox("文件不已存在,該列項(xiàng)將被刪除!", "Warning",MB_OK); CWmplayerDlg:Ondelitem(); else KillTimer(0); m_control.play(); if(m_control.GetCurrentPosition()=0) m_control.Se
16、tCurrentPosition(0.01); SetTimer(0,20,NULL); spaceflag=0; 2. 實(shí)現(xiàn)播放暫停的代碼:void CWmplayerDlg:Onpause() / TODO: Add your control notification handler code herem_control.pause(); 3.實(shí)現(xiàn)停止播放的代碼:void CWmplayerDlg:Onstop() / TODO: Add your control notification handler code hereKillTimer(0); m_control.stop();4.
17、 實(shí)現(xiàn)退出播放的代碼:運(yùn)用默認(rèn)對話框初始的取消按鈕,并對其屬性進(jìn)行修改。進(jìn)而實(shí)現(xiàn)退出播放器的功能。5. 實(shí)現(xiàn)全屏的代碼:void CWmplayerDlg:Onfull() / TODO: Add your control notification handler code hereif(m_control.GetCurrentPosition()!=0&&!m_player.GetFullScreen() m_control.pause(); m_player.SetFullScreen(true); m_control.play(); 6.實(shí)現(xiàn)文件打開的代碼:void CW
18、mplayerDlg:OnOK() / TODO: Add extra validation herem_listCtrl.SetFocus(); CString str; POSITION pos; pos = m_listCtrl.GetFirstSelectedItemPosition(); IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetItemState(IndexInFieldList,LVIS_SELECTED, LVIS_SELECTED); TCHAR szFilter = _T(&q
19、uot;Mp3 File(*.mp3)|*.mp3 | Wma File(*.wma)|*.wma | Video File(*.dat)|*.dat | Wave File(*.wav)|*.wav | AVI File(*.avi)|*.avi | Movie File(*.mov)|*.mov | Media File(*.mmm)|*.mmm | Mid File(*.mid;*,rmi)|*.mid;*.rmi| MPEG File(*.mpeg)|*.mpeg| All File(*.*)|*.*|"); CFileDialog fileDlg(TRUE,NULL, NU
20、LL,OFN_HIDEREADONLY | OFN_OVERWRITEPROMPT, szFilter, this); CString strFilePath; if (IDOK = fileDlg.DoModal() strFilePath = fileDlg.GetPathName(); strFilePath.MakeUpper(); m_player.SetUrl(strFilePath); m_media=static_cast<CWMPMedia>(m_player.newMedia(strFilePath); m_list.appendItem(m_media); m
21、_listCtrl.InsertItem(0,m_media.GetName();m_listCtrl.SetItemText(0,1,_T(m_media.getItemInfo("FileType"); m_listCtrl.SetItemText(0,2,_T(m_media.GetDurationString(); m_listCtrl.SetItemText(0,3,_T(strFilePath); m_listCtrl.SetItemText(0,4,_T(m_media.getItemInfo("Duration"); m_player.S
22、etUrl(m_listCtrl.GetItemText(0,3); m_listCtrl.SetItemState(0,LVIS_SELECTED,LVIS_SELECTED); /CDialog:OnOK();6. 實(shí)現(xiàn)播放器快進(jìn)、快退功能的代碼:void CWmplayerDlg:Onreverse() / TODO: Add your control notification handler code heredouble t = m_control.GetCurrentPosition(); m_control.SetCurrentPosition(t=t-10);void CWmp
23、layerDlg:Onforward() double t = m_control.GetCurrentPosition(); m_control.SetCurrentPosition(t=t+10);7. 實(shí)現(xiàn)播放器播放列表的代碼:void CWmplayerDlg:Onplaylist() flag=!flag; / TODO: Add your control notification handler code here if(flag) SetWindowPos(NULL,0,0,420,505,SWP_NOMOVE); else SetWindowPos(NULL,0,0,650,5
24、05,SWP_NOMOVE);8. 實(shí)現(xiàn)播放器播放模式的代碼:void CWmplayerDlg:OnTimer(UINT nIDEvent)switch(nIDEvent)case 0: if(m_control.GetCurrentPosition()=0)m_schedule.SetPos(0);SetDlgItemText(IDC_CURRENT,"00:00");SetDlgItemText(IDC_DURATION,"00:00");switch(m_order)case 0:KillTimer(0);POSITION pos;pos = m
25、_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetFocus();if(IndexInFieldList = m_listCtrl.GetItemCount()-1)m_listCtrl.SetItemState(IndexInFieldList, LVIS_SELECTED,LVIS_SELECTED);m_control.stop();return;m_listCtrl.SetItemState(IndexInField
26、List,LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList+1, LVIS_SELECTED,LVIS_SELECTED);CString strName=m_listCtrl.GetItemText(IndexInFieldList+1,3);m_player.SetUrl(strName);CWmplayerDlg:OnPlayer();break;case 1:KillTimer(0);m_listCtrl.SetFocus();POSITION pos;pos = m_listCtrl.GetFi
27、rstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos);m_listCtrl.SetItemState(IndexInFieldList,LVIS_SELECTED,LVIS_SELECTED);int i;srand(unsigned)time( NULL );i=rand()%m_listCtrl.GetItemCount();m_listCtrl.SetItemState(i, LVIS_SELECTED,LVIS_SELECTED);CString strName=m_listCt
28、rl.GetItemText(i,3);m_player.SetUrl(strName);CWmplayerDlg:OnPlayer();break; case 2:KillTimer(0);POSITION pos;pos = m_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetFocus();if(IndexInFieldList = m_listCtrl.GetItemCount()-1)IndexInFieldLis
29、t=-1;m_listCtrl.SetItemState(IndexInFieldList,LVIS_SELECTED,LVIS_SELECTED);m_listCtrl.SetItemState(IndexInFieldList+1, LVIS_SELECTED,LVIS_SELECTED);CString strName=m_listCtrl.GetItemText(IndexInFieldList+1,3);m_player.SetUrl(strName);CWmplayerDlg:OnPlayer();break; case 3:KillTimer(0);CWmplayerDlg:On
30、Player();break;default:KillTimer(0);break;break;POSITION pos;double td;pos = m_listCtrl.GetFirstSelectedItemPosition();IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos);td=_ttol(m_listCtrl.GetItemText(IndexInFieldList,4);m_schedule.SetPos(int)(m_control.GetCurrentPosition()/td)*200);SetDlgItemT
31、ext(IDC_DURATION,m_listCtrl.GetItemText(IndexInFieldList,2);SetDlgItemText(IDC_CURRENT,m_control.GetCurrentPositionString();break;CDialog:OnTimer(nIDEvent);9. 實(shí)現(xiàn)播放器播放文件操作的代碼(以選中項(xiàng)上衣為例):void CWmplayerDlg:Onitemup() / TODO: Add your control notification handler code herem_listCtrl.SetFocus(); POSITION
32、pos; int num; CString name; CString form; CString length; CString strName; CString duration; UINT flag1 = LVIS_SELECTED|LVIS_FOCUSED;pos = m_listCtrl.GetFirstSelectedItemPosition(); IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); if(IndexInFieldList = -1) AfxMessageBox("列表內(nèi)沒有被選中項(xiàng)!"
33、); return; if(IndexInFieldList = 0) AfxMessageBox("已經(jīng)到了列表頭部!");m_listCtrl.SetItemState(IndexInFieldList, flag1, flag1); return; num=IndexInFieldList; name=m_listCtrl.GetItemText(num,0);form=m_listCtrl.GetItemText(num,1); length=m_listCtrl.GetItemText(num,2); strName=m_listCtrl.GetItemText(
34、num,3); duration=m_listCtrl.GetItemText(num,4); m_listCtrl.DeleteItem(num); m_listCtrl.InsertItem(num-1,_T(name); m_listCtrl.SetItemText(num-1,1,_T(form); m_listCtrl.SetItemText(num-1,2,_T(length); m_listCtrl.SetItemText(num-1,3,_T(strName);m_listCtrl.SetItemText(num-1,4,_T(duration); m_listCtrl.Set
35、ItemState(IndexInFieldList-1, flag1, flag1); 10. 實(shí)現(xiàn)播放器播放熱鍵操作的代碼:BOOL CWmplayerDlg:PreTranslateMessage(MSG* pMsg) / TODO: Add your specialized code here and/or call the base classif(pMsg->message=WM_KEYDOWN) switch(pMsg->wParam) case VK_ESCAPE: /ESC鍵 if(m_control.GetCurrentPosition()!=0&& m_player.GetFullScreen() m_player.SetFullScreen(false); else SendMessage(WM_CLOSE); return TRUE; break; case VK_SPACE: /空格鍵 if(spaceflag=0) CWmplayerDlg:Onpause(); else if(spaceflag=1) CWmplayerDlg:OnPlayer(); return
溫馨提示
- 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)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 學(xué)校電采暖管理制度
- 學(xué)校營養(yǎng)辦管理制度
- 學(xué)生作業(yè)量管理制度
- 學(xué)生防欺凌管理制度
- 安全勸導(dǎo)員管理制度
- 安全科文件管理制度
- 宋太祖地方管理制度
- 寶安托育園管理制度
- 實(shí)訓(xùn)室物品管理制度
- 客戶qq群管理制度
- 2025-2030中國伊利石行業(yè)運(yùn)營效益及競爭策略展望分析報(bào)告
- 2025春季學(xué)期國開電大本科《管理英語3》一平臺機(jī)考真題及答案(第十套)
- 2025江蘇揚(yáng)州寶應(yīng)縣“鄉(xiāng)村振興青年人才”招聘67人筆試備考試題及答案詳解一套
- 2025年瀘州市中考語文試卷真題
- 湖南省2025年高考公安院校公安專業(yè)考生檔案審核表
- 地理:(網(wǎng)絡(luò)參考版)黑吉遼蒙2025年高考真題地理試卷含答案
- 2025新修訂《全國人民代表大會和地方各級人民代表大會代表法》宣講
- 部編人教版八年級語文下冊期末各單元重點(diǎn)知識
- 2025年動漫IP產(chǎn)業(yè)鏈構(gòu)建與動漫產(chǎn)業(yè)產(chǎn)業(yè)鏈協(xié)同效應(yīng)研究報(bào)告
- 2024-2025學(xué)年八年級下冊道德與法治期末測試模擬卷(統(tǒng)編版)(含答案)
- 2025年社區(qū)工作者考試題目及答案
評論
0/150
提交評論