版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、一.課題名稱:視屏播放器軟件設(shè)計(jì)及開發(fā)文檔PLAYER1:(基于ActiveMovie控件)1-三、需求分析與問題陳述:。設(shè)計(jì)動(dòng)畫播放器,可以通過動(dòng)畫控件播放動(dòng)畫,用文件公用對(duì)話框打開AVI文件并播放,也可以通過鼠標(biāo)左右鍵控制;播放時(shí)若用鼠標(biāo)左鍵單擊畫面,可以暫停播放,若用右鍵單擊畫面,可以直接對(duì)畫面進(jìn)行播放,暫停,停止等控制,可以設(shè)置全屏效果。1-四、設(shè)計(jì)目標(biāo)與設(shè)計(jì)任務(wù):。一開始準(zhǔn)備設(shè)計(jì)一個(gè)基于對(duì)話框的工程,并為這個(gè)對(duì)話框定義以下八個(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ù)原始大?。┑墓δ?-五、解題算法思想:。向?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)|*.mov| Media File(*.mmm)|*.mmm|Mid File(*.mid;*,rmi)|*.mid;*.rmi|MPEG
5、 File(*.mpeg)|*.mpeg|All File(*.*)|*.*|; CFileDialog dlg(TRUE,NULL,NULL,OFN_HIDEREADONLY,szFileFilter); if(dlg.DoModal()=IDOK) CString PathName=dlg.GetPathName(); PathName.MakeUpper(); m_AMovie.SetFileName(PathName); SetWindowText(m_AMovie.GetFileName(); 7實(shí)現(xiàn)鼠標(biāo)單擊屏幕暫停(或繼續(xù))播放的功能的代碼:void CPlayerDlg:OnCl
6、ickAmovie() 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 notification handler code herem_AMovie.Pause();if(m_AMovie.GetFullScreenMode()=1)m_AMovie.SetFullScreenMode(false);m_AM
7、ovie.SetMovieWindowSize(SW_SHOWMAXIMIZED);elsem_AMovie.SetFullScreenMode(true);m_AMovie.SetMovieWindowSize(SW_SHOWNORMAL);m_AMovie.Run();9.對(duì)于音量的調(diào)節(jié),我們并沒有采用按鈕或者按鍵的方式實(shí)現(xiàn)。我們使用了進(jìn)度條控件。首先,我們新增了一個(gè)對(duì)話框,在新對(duì)話框上插入一個(gè)進(jìn)度條,并新增相應(yīng)的控件變量。通過移動(dòng)進(jìn)度條來改變動(dòng)畫的聲音。主要代碼代碼如下:void CVolumeDlg:SetVolume(CActiveMovie3 *pAmovie) m_pAMovie
8、=pAmovie;/ 如果未打開任何媒體文件,則音量調(diào)節(jié)不可用。ActiveMovie 控件的 / CurrentState 屬性返回控件的當(dāng)前狀態(tài),-1 表示未打開任何文件,此時(shí)彈出/ 出錯(cuò)提示信息。 if (m_pAMovie-GetCurrentState()!=-1)DoModal(); else MessageBox(音頻設(shè)備尚未加載,請(qǐng)先打開一個(gè)媒體文件。); void CVolumeDlg:OnHScroll(UINT nSBCode, UINT nPos, CScrollBar* pScrollBar)/ TODO: Add your message handler code
9、here and/or call default CSliderCtrl *pSlider=(CSliderCtrl *)pScrollBar;int nVolume=pSlider-GetPos();m_pAMovie-SetVolume(nVolume);CDialog:OnHScroll(nSBCode, nPos, pScrollBar);BOOL CVolumeDlg:OnInitDialog()CDialog:OnInitDialog(); m_sld.SetRange(-10000, 0); m_sld.SetTicFreq(1000); m_sld.SetLineSize(20
10、0); m_sld.SetPageSize(1000); m_sld.SetPos(m_pAMovie-GetVolume(); return TRUE;1-六、數(shù)據(jù)結(jié)構(gòu)描述:。類中新增變量及其作用:1. m_AMovie,是與控件ActiveMovie相關(guān)的變量,通過處理該變量對(duì)播放器進(jìn)行功能實(shí)現(xiàn)。2. m_pAMovie,是指向ActiveMovie類的指針變量,存在于音量控制對(duì)話框類里,用于兩個(gè)對(duì)話框之間消息的傳遞傳遞。3. m_sld,是與滑動(dòng)條控件相關(guān)的變量。通過處理該變量實(shí)現(xiàn)音量的改變。PLAYER2:(基于windows media player控件)2-三、需求分析與問題陳述:
11、。 設(shè)計(jì)多媒體播放器,主要通過windows media player控件實(shí)現(xiàn)該播放器的主要功能。界面以按鈕為主,并通過按鈕實(shí)現(xiàn)對(duì)播放文件的各項(xiàng)控制。主要有文件打開、播放、暫停、停止、全屏以及音量、播放模式和播放列表的操作。由于該軟件為多媒體播放器,所以程序需要要支持多種格式的文件。除此之外,還設(shè)置了Esc熱鍵以實(shí)現(xiàn)退出全屏的快捷操作。2-四、設(shè)計(jì)目標(biāo)與設(shè)計(jì)任務(wù):。一開始按照書上案例要求設(shè)計(jì)一個(gè)基于對(duì)話框的工程,并為這個(gè)對(duì)話框定義以下八個(gè)按鈕:OPEN 打開AVI文件PLAY 開始播放文件PAUSE 暫停播放STOP 停止播放FULLSCREEM 設(shè)置全屏EXIT 退出ADD 增加音量REDU
12、CE 減少音量(圖1.模型1效果圖如下)在繼續(xù)設(shè)計(jì)的過程中,我們?yōu)閷?shí)現(xiàn)播放器功能的多樣化、人性化,又相繼增加了播放列表控件、播放列表操作組合空件和播放模式組合控件。而且將音量控制進(jìn)行改善,不僅增加了靜音控制,還將音量控制改變?yōu)榭刂茥l形式,使得更為直觀。(圖2.模型二效果圖如下) 而后期在對(duì)播放器界面美化過程中,相繼為播放器添加了背景圖片以及改變了對(duì)話框的圖標(biāo),還有稍微調(diào)整了按鈕的排布。最終播放器界面效果如下圖:其次,添加按鈕、鼠標(biāo)、鍵盤消息響應(yīng),實(shí)現(xiàn)整體播放的功能。如:實(shí)現(xiàn)雙擊屏幕全屏(或恢復(fù)原始大小)的功能;Esc鍵實(shí)現(xiàn)退出全屏功能等等。2-五.解題算法思想:。向?qū)υ捒蛱砑觲indows m
13、edia player控件(如下圖),并為其添加相應(yīng)的變量 CWMPPlayer m_player,利用其成員函數(shù)實(shí)現(xiàn)目標(biāo)功能。主要代碼如下:由于要對(duì)wmp播放器實(shí)現(xiàn)控制,還要添加其他三個(gè)成員變量: CWMPMedia m_media;CWMPSettings m_setting;CWMPControls m_control;所以還需要添加上述三個(gè)類的頭文件: / wmplayerDlg.h : header file / #include wmpcontrols.h #include wmpsettings.h #include wmpplaylist.h1.實(shí)現(xiàn)播放文件的代碼:void C
14、WmplayerDlg:OnPlayer() / TODO: Add your control notification handler code hereCFileFind finder;if(m_list.GetCount()=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_
15、control.play(); if(m_control.GetCurrentPosition()=0) m_control.SetCurrentPosition(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 contro
16、l notification handler code hereKillTimer(0); m_control.stop();4. 實(shí)現(xiàn)退出播放的代碼:運(yùn)用默認(rèn)對(duì)話框初始的取消按鈕,并對(duì)其屬性進(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.Se
17、tFullScreen(true); m_control.play(); 6.實(shí)現(xiàn)文件打開的代碼:void CWmplayerDlg:OnOK() / TODO: Add extra validation herem_listCtrl.SetFocus(); CString str; POSITION pos; pos = m_listCtrl.GetFirstSelectedItemPosition(); IndexInFieldList = m_listCtrl.GetNextSelectedItem(pos); m_listCtrl.SetItemState(IndexInFieldLi
18、st,LVIS_SELECTED, LVIS_SELECTED); TCHAR szFilter = _T(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(*
19、.*)|*.*|); CFileDialog fileDlg(TRUE,NULL, NULL,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(m_player.newMedia(strFilePath); m_
20、list.appendItem(m_media); m_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_playe
21、r.SetUrl(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 C
22、WmplayerDlg: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,65
23、0,505,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_listCtrl.GetFirstSel
24、ectedItemPosition();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(IndexInFieldList,LVIS_SELECTED,LV
25、IS_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.GetFirstSelectedItemPositi
26、on();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_listCtrl.GetItemText(i,3);m
27、_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)IndexInFieldList=-1;m_listCtrl.SetIt
28、emState(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:OnPlayer();break;defaul
29、t: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);SetDlgItemText(IDC_DURATION,m_li
30、stCtrl.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 pos; int num; CString
31、 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)!); return; if(IndexInFieldList =
32、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(num,3); duration=m_listCtrl.GetItemText(num,4
33、); 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.SetItemState(IndexInFieldList-1, flag1, flag1);
34、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 TRUE; break; case VK_LEFT: /鍵 CWmpl
溫馨提示
- 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. 人人文庫網(wǎng)僅提供信息存儲(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ì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025年度新材料研發(fā)高級(jí)人才引進(jìn)及產(chǎn)業(yè)化合同
- 二零二五年度籃球賽事場(chǎng)地承包與宣傳合同
- 2025年度員工個(gè)人資金周轉(zhuǎn)困難公司借款合同
- 二零二五年度社區(qū)老年食宿關(guān)愛服務(wù)合同
- 二零二五年度農(nóng)產(chǎn)品加工廠工人雇傭合同示范文本
- 二零二五年度智能城市建設(shè)項(xiàng)目股權(quán)投資顧問合同
- 2025年倉庫貨運(yùn)車輛租賃合同
- 空間站項(xiàng)目股權(quán)居間合同
- 教育培訓(xùn)課程報(bào)名合同及成績(jī)免責(zé)聲明
- 城市公共安全監(jiān)控系統(tǒng)建設(shè)項(xiàng)目投資合同
- 第1課 隋朝統(tǒng)一與滅亡 課件(26張)2024-2025學(xué)年部編版七年級(jí)歷史下冊(cè)
- 【歷史】唐朝建立與“貞觀之治”課件-2024-2025學(xué)年統(tǒng)編版七年級(jí)歷史下冊(cè)
- 產(chǎn)業(yè)園區(qū)招商合作協(xié)議書
- 2024年廣東省公務(wù)員錄用考試《行測(cè)》真題及答案解析
- 盾構(gòu)標(biāo)準(zhǔn)化施工手冊(cè)
- 天然氣脫硫完整版本
- 人教版八級(jí)物理下冊(cè)知識(shí)點(diǎn)結(jié)
- 2021年高考真題-生物(湖南卷) 含解析
- 新疆2024年新疆和田師范??茖W(xué)校招聘70人筆試歷年典型考題及考點(diǎn)附答案解析
- 【正版授權(quán)】 ISO 15978:2002 EN Open end blind rivets with break pull mandrel and countersunk head - AIA/St
- 2024山西文旅投資集團(tuán)招聘117人公開引進(jìn)高層次人才和急需緊缺人才筆試參考題庫(共500題)答案詳解版
評(píng)論
0/150
提交評(píng)論